我见过的最完善的log4net配置
Log4net的优点:
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专
门的调试工具了。然而 一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。
日志具有以下优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;
一旦在程序中加入了 Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,
日志信息可以输出到不同的地方。
Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。
Log4net的结构
log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及
Layout(布局).
【基础】
官方网站的配置例子: http://logging.apache.org/log4net/release/config-examples.html
配置节点是由logger和appender组成的.
logger说明要使用哪些appender. appender说明日志怎样存储,如写入系统日志,文本,数据库,邮件等...
具体参见上面的链接.
appender节里有两个重要的子节点.
filter负责过滤你想要得到的日志级别或包含特殊的字符串
layout负责日志输出的样式.
【配置】
分三步:
Ⅰ.创建一个网站,引入log4net.dll
Ⅱ.项目里新建一个配置文件Log4Net.config,删除自动生成的代码,Copy下列代码到该文件.
<?xml version="1.0" encoding="utf-8"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
/Windows/Microsoft.Net/Framework/v2.x/Config 中
-->
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<logger name="loggerAX">
<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL" />
<appender-ref ref="SmtpAppenderAX"></appender-ref>
<appender-ref ref="FileAppenderAX"></appender-ref>
</logger>
<appender name="SmtpAppenderAX" type="log4net.Appender.SmtpAppender">
<to value="To@domain.com"></to>
<from value="From@domain.com" />
<subject value="AX'Test Log Message" />
<smtpHost value="mail.eshinfo.com" />
<username value="eshinfo" />
<password value="eshinfo" />
<bufferSize value="2048" />
<!--超长部分是否丢弃-->
<lossy value="false" />
<!--输出级别在WARN和OFF之间的日志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="OFF" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %
newline%message%newline" />
</layout>
</appender>
<appender name="FileAppenderAX" type="log4net.Appender.RollingFileAppender">
<!--绝对路径-->
<file value="D://AX.txt"></file>
<!--相对路径,在项目的根目录下-->
<!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
<file value="./Log/AX.txt"></file>
<!--防止多线程时不能写Log,官方说线程非安全-->
<!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<!--可以为:Once|Size|Date|Composite-->
<!--Composite为Size和Date的组合-->
<rollingStyle value="composite" />
<!--日志最大个数,都是最新的-->
<!--rollingStyle节点为Date时,该节点不起作用-->
<!--rollingStyle节点为Size时,只能有value个日志-->
<!--rollingStyle节点为Composite时,每天有value个日志-->
<maxSizeRollBackups value="10" />
<!--当备份文件时,为文件名加的后缀-->
<!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP 应该是程序上的一个bug-->
<!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
<datePattern value="_yyyy-MM-dd.TXT" />
<!--可用的单位:KB|MB|GB-->
<!--不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="1KB" />
<!--置为true,当前最新日志文件名永远为file节中的名字-->
<staticLogFileName value="true" />
<!--输出级别在INFO和ERROR之间的日志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="ERROR" />
</filter>
<!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
<filter type="log4net.Filter.LevelMatchFilter">
<param name="LevelToMatch" value="WARN" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
<!--==================layout节点的配置说明======================-->
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换 行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
模式字符串为:%-10c -%m%n
代码为:
ILog log=LogManager.GetLogger(“Exam.Log”);
log.Debug(“Hello”);
则输出为下面的形式:
Exam.Log - Hello
%L:输出语句所在的行 号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
<!--=========================================================-->
Ⅲ.在Default.aspx.cs的Page_Load里添加如下代码.
protected void Page_Load(object sender, EventArgs e)
{
//下面两句应该放在网站刚刚启动时加载,并放在一个静态方法里方便调用
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath
("Log4Net.config")));
ILog logAX = LogManager.GetLogger("Admin");
//写日志
logAX.Error("Error AX");
logAX.Info("Info AX");
}
------------------------
或者在通用类库(Common)里添加log4net.dll 的引用,并添加ilog类
public class Log
{
private static log4net.ILog log = log4net.LogManager.GetLogger("Admin");
public static void Debug(string message)
{
if (log.IsDebugEnabled)
{
log.Debug(message);
}
}
public static void Debug(System.Exception ex1)
{
if (log.IsDebugEnabled)
{
log.Debug(ex1.Message.ToString() + "/r/n" + ex1.Source.ToString() + "/r/n" +
ex1.TargetSite.ToString() + "/r/n" + ex1.StackTrace.ToString());
}
}
public static void Error(string message)
{
if (log.IsErrorEnabled)
{
log.Error(message);
}
}
public static void Fatal(string message)
{
if (log.IsFatalEnabled)
{
log.Fatal(message);
}
}
public static void Info(string message)
{
if (log.IsInfoEnabled)
{
log.Info(message);
}
}
public static void Warn(string message)
{
if (log.IsWarnEnabled)
{
log.Warn(message);
}
}
}
并在通用类层(Common)的assemblyinfo.cs 里加上
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
表示引用该配置文件
在其它层要写日志的时候
XXX.Common.Log.Debug(ex1);
------------------------------
F5,在项目目录下找到Log文件夹的AX.txt ,这个就是刚刚生成的日志文件.
【写日志的原则】
1.在catch后,把异常写入日志.
2.在调用第三方控件的开始和结束处.
3.在连接数据库的开始结束处.
4.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.
5.在自己认为很重要的逻辑处写入日志.
【注意】
发现有重要问题时最好用邮件日志,但不要指望上面的邮件配置节能发日志.
要使用能用的smtp服务器,163的只有部分用户能用.我的就不能用,很是郁闷.
要合理配置下列参数.
Ⅰ.日志文件的大小
Ⅱ.备份的日志名样式,最好时间精确到分
例子:
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<!--定义输出到文件中-->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<!--定义文件存放位置-->
<file value="log4netfile.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<footer value="Wen" />
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%
logger property:[%property{NDC}] - 错误描述:%message%newline" />
</layout>
</appender>
<!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。
-->
<root>
<!--文件形式记录日志-->
<appender-ref ref="LogFileAppender" />
<!--如果不启用相应的日志记录,可以通过这种方式注释掉-->
<!--<appender-ref ref="AdoNetAppender_Access" />-->
</root>
</log4net>
</configuration>
using log4net;
//创建日志记录组件实例
ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//记录错误日志
log.Error("error", new Exception("发生了一个异常"));
//记录严重错误
log.Fatal("fatal", new Exception("发生了一个致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");
Console.WriteLine("日志记录完毕。");
Console.Read();
我见过的最完善的log4net配置的更多相关文章
- (转载)非常完善的Log4net配置详细说明
一.前言 在项目中,对项目的日志收集是非常重要的,这里我就说说代码的异常日志收集.收集异常日志,有很多第三方成熟的框架,我这里就介绍一下我常用的Log4net. Log4Net介绍 Log4net 是 ...
- (转)非常完善的Log4net详细说明
转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/45463 ...
- Log4Net配置以及使用
跟踪程序代码,及时发现程序的运行状态,是每个成熟的软件所必不可少的一个环节,网站发布到真实的环境之后,对于程序的运行状态,我们并不能想开发环境那也,点击调试.日志记录显示就尤为重要,在.NET中记录日 ...
- Common.Logging log4net Common.Logging.Log4Net 配置
1.log4net 单独配置 log4net支持多种格式的日志输出,我这里只配置输出到本地的txt文件这种格式. <log4net> <root> <appender-r ...
- Log4Net 配置StmpAppender
目录 Log4Net 配置StmpAppender 1 1.前言 1 2.详细配置 1 1.StmpAppender配置 1 2.Root 配置 2 3.更多选项 ...
- C# Log4Net配置
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
- Log4net配置与使用简要说明
log4net详细配置:http://logging.apache.org/log4net/本文描述如有错误,以官网的说明为准;p 一:先来看看log4net中的几个概念: 1. log4net继承机 ...
- MVC Log4Net 配置
1.引用log4net.dll 2.在项目根目录下增加log4.config文件 <?xml version="1.0"?> <configuration> ...
- ASP.NET MVC学习之Log4Net配置(日志记录)
Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...
随机推荐
- 编译 & 执行 C++ 程序
编译 & 执行 C++ 程序接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它.下面是简单的步骤: 打开一个文本编辑器,添加上述代码.保存文件为 hello.cpp.打开命令提 ...
- C# 将RichTextBox中内容的文档以二进制形式存
private void button1_Click(object sender, EventArgs e) { System.IO.MemoryStream mstream = new ...
- python小工具
http://blog.csdn.net/pipisorry/article/details/46754515 python复制.删除文件代码.python代码出错重新启动 python遍历和删除指定 ...
- Android SwipeMenuListView
Android平台上的第三方开源项目SwipeMenuListView是一种能够在某一个view条目中响应用户左右側滑(从左向右,或从右向左滑动),滑出操作菜单的UI控件.类似这样的控件达到的U ...
- [转]lsof详解
lsof是一个功能强大的诊断工具,它可以通过进程与打开的文件进行联系,可以列出一个进程打开的所有文件信息. 1 寻找与打开的文件相关联的进程通过指定文件,可以发现正在使用这个文件的进程# lsof / ...
- linux服务器检测CPU使用率、负载以及java占用CPU使用率的shell脚本
#!/bin/bash CPU=`top -b -n 1|grep Cpu|awk '{print $2}'|cut -f 1 -d "."`LOAD=`top -b -n 1|g ...
- C#委托和事件定义和使用
委托 定义委托的语法和定义方法比较相似,只是比方法多了一个关键字delegate ,我们都知道方法就是将类型参数化,所谓的类型参数化就是说该方法接受一个参数,而该参数是某种类型的参数,比如int.st ...
- _variant_t和_bstr_t
_variant_t和_bstr_t这两个类分别封装并管理VARIANT和BSTR这两种数据类型, VARIANT和BSTR这两种类型是COM中使用的数据类型. 实现_variant_t向int,St ...
- 移动HTML 5前端性能优化指南
概述 PC优化手段在Mobile侧同样适用 在Mobile侧我们提出三秒种渲染完成首屏指标 基于第二点,首屏加载3秒完成或使用Loading 基于联通3G网络平均338KB/s(2.71Mb/s),所 ...
- linux中,查看某个进程打开的文件数?
需求描述: 今天在处理一个问题的时候,涉及到查看某个进程打开的文件数,在此记录下. 操作过程: 1.通过lsof命令查看某个特定的进程打开的文件数 [root@hadoop3 ~]# lsof -p ...