【引】
最近听朋友说起Log4Net不好配置,正好项目中用到了,于是有了这篇blog.貌似官方不再进行维护了.

【基础】

官方网站的配置例子: http://logging.apache.org/log4net/release/config-examples.html

配置节点是由logger和appender组成的.

logger说明要使用哪些appender. appender说明日志怎样存储,如写入系统日志,文本,数据库,邮件等...具体参见上面的链接.

appender节里有两个重要的子节点.

filter负责过滤你想要得到的日志级别或包含特殊的字符串

layout负责日志输出的样式.

【配置】

分三步:

Ⅰ.创建一个网站,引入log4net.dll

这里可以下载log4net源码  http://logging.apache.org/log4net/download.html

Ⅱ.项目里新建一个配置文件Log4Net_AX.config,删除自动生成的代码,Copy下列代码到该文件.

 

Log4Net最简单的使用配置_AX<log4net>
Log4Net最简单的使用配置_AX  
<logger name="loggerAX">
Log4Net最简单的使用配置_AX    
<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
Log4Net最简单的使用配置_AX    
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
Log4Net最简单的使用配置_AX    
<level value="ALL" />
Log4Net最简单的使用配置_AX    
<appender-ref ref="SmtpAppenderAX"></appender-ref>
Log4Net最简单的使用配置_AX    
<appender-ref ref="FileAppenderAX"></appender-ref>
Log4Net最简单的使用配置_AX  
</logger>
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX  
<appender name="SmtpAppenderAX" type="log4net.Appender.SmtpAppender">
Log4Net最简单的使用配置_AX    
<to value="AXzhz@163.com"></to>
Log4Net最简单的使用配置_AX    
<from value="AXzhz@163.com" />
Log4Net最简单的使用配置_AX    
<subject value="AX'Test Log Message" />
Log4Net最简单的使用配置_AX    
<smtpHost value="smtp.163.com" />
Log4Net最简单的使用配置_AX    
<username value="AXzhz" />
Log4Net最简单的使用配置_AX    
<password value="110" />
Log4Net最简单的使用配置_AX    
<bufferSize value="2048" />
Log4Net最简单的使用配置_AX    
<!--超长部分是否丢弃-->
Log4Net最简单的使用配置_AX    
<lossy value="false" />
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX    
<!--evaluator时好时坏,靠不住,还是用filter实在-->
Log4Net最简单的使用配置_AX    
<!--<evaluator type="log4net.Core.LevelEvaluator">
Log4Net最简单的使用配置_AX      <threshold value="ERROR"/>
Log4Net最简单的使用配置_AX    </evaluator>
-->
Log4Net最简单的使用配置_AX    
<!--<evaluator type="log4net.Core.LevelEvaluator,log4net">
Log4Net最简单的使用配置_AX      <threshold value="WARN" />
Log4Net最简单的使用配置_AX    </evaluator>
-->
Log4Net最简单的使用配置_AX    
<!--将导致不能写日志-->
Log4Net最简单的使用配置_AX    
<!--<filter type="log4net.Filter.DenyAllFilter" />-->
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX    
<!--输出级别在WARN和OFF之间的日志-->
Log4Net最简单的使用配置_AX    
<filter type="log4net.Filter.LevelRangeFilter">
Log4Net最简单的使用配置_AX      
<param name="LevelMin" value="WARN" />
Log4Net最简单的使用配置_AX      
<param name="LevelMax" value="OFF" />
Log4Net最简单的使用配置_AX    
</filter>
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX    
<layout type="log4net.Layout.PatternLayout">
Log4Net最简单的使用配置_AX      
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %newline%message%newline" />
Log4Net最简单的使用配置_AX    
</layout>
Log4Net最简单的使用配置_AX  
</appender>
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX  
<appender name="FileAppenderAX" type="log4net.Appender.RollingFileAppender">
Log4Net最简单的使用配置_AX    
<!--绝对路径-->
Log4Net最简单的使用配置_AX    
<file value="D:\\AX.txt"></file>
Log4Net最简单的使用配置_AX    
<!--相对路径,在项目的根目录下-->
Log4Net最简单的使用配置_AX    
<!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
Log4Net最简单的使用配置_AX    
<file value="./Log/AX.txt"></file>
Log4Net最简单的使用配置_AX    
<!--防止多线程时不能写Log,官方说线程非安全-->
Log4Net最简单的使用配置_AX    
<!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
Log4Net最简单的使用配置_AX    
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
Log4Net最简单的使用配置_AX    
<appendToFile value="true" />
Log4Net最简单的使用配置_AX    
<!--可以为:Once|Size|Date|Composite-->
Log4Net最简单的使用配置_AX    
<!--Composite为Size和Date的组合-->
Log4Net最简单的使用配置_AX    
<rollingStyle value="composite" />
Log4Net最简单的使用配置_AX    
<!--日志最大个数,都是最新的-->
Log4Net最简单的使用配置_AX    
<!--rollingStyle节点为Date时,该节点不起作用-->
Log4Net最简单的使用配置_AX    
<!--rollingStyle节点为Size时,只能有value个日志-->
Log4Net最简单的使用配置_AX    
<!--rollingStyle节点为Composite时,每天有value个日志-->
Log4Net最简单的使用配置_AX    
<maxSizeRollBackups value="10" />
Log4Net最简单的使用配置_AX    
<!--当备份文件时,为文件名加的后缀-->
Log4Net最简单的使用配置_AX    
<!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP  应该是程序上的一个bug-->
Log4Net最简单的使用配置_AX    
<!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
Log4Net最简单的使用配置_AX    
<datePattern value="_yyyy-MM-dd.TXT" />
Log4Net最简单的使用配置_AX    
<!--可用的单位:KB|MB|GB-->
Log4Net最简单的使用配置_AX    
<!--不要使用小数,否则会一直写入当前日志-->
Log4Net最简单的使用配置_AX    
<maximumFileSize value="1KB" />
Log4Net最简单的使用配置_AX    
<!--置为true,当前最新日志文件名永远为file节中的名字-->
Log4Net最简单的使用配置_AX    
<staticLogFileName value="true" />
Log4Net最简单的使用配置_AX    
<!--输出级别在INFO和ERROR之间的日志-->
Log4Net最简单的使用配置_AX    
<filter type="log4net.Filter.LevelRangeFilter">
Log4Net最简单的使用配置_AX      
<param name="LevelMin" value="INFO" />
Log4Net最简单的使用配置_AX      
<param name="LevelMax" value="ERROR" />
Log4Net最简单的使用配置_AX    
</filter>
Log4Net最简单的使用配置_AX    
<!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
Log4Net最简单的使用配置_AX    
<filter type="log4net.Filter.LevelMatchFilter">
Log4Net最简单的使用配置_AX      
<param name="LevelToMatch" value="WARN" />
Log4Net最简单的使用配置_AX    
</filter>
Log4Net最简单的使用配置_AX    
<filter type="log4net.Filter.DenyAllFilter" />
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX    
<layout type="log4net.Layout.PatternLayout">
Log4Net最简单的使用配置_AX      
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
Log4Net最简单的使用配置_AX    
</layout>
Log4Net最简单的使用配置_AX  
</appender>
Log4Net最简单的使用配置_AX
</log4net>
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX
Log4Net最简单的使用配置_AX
<!--==================================layout节点的配置说明==================================-->
Log4Net最简单的使用配置_AX
<!--                                                                        Made By AX      -->
Log4Net最简单的使用配置_AX
<!--        %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息                          -->
Log4Net最简单的使用配置_AX
<!--        %n(new line):换行                                                                   -->
Log4Net最简单的使用配置_AX
<!--        %d(datetime):输出当前语句运行的时刻                                                 -->
Log4Net最简单的使用配置_AX
<!--        %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数                           -->
Log4Net最简单的使用配置_AX
<!--        %t(thread id):当前语句所在的线程ID                                                  -->
Log4Net最简单的使用配置_AX
<!--        %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等                           -->
Log4Net最简单的使用配置_AX
<!--        %c(class):当前日志对象的名称,例如:                                                -->
Log4Net最简单的使用配置_AX
<!--               模式字符串为:%-10c -%m%n                                                    -->
Log4Net最简单的使用配置_AX
<!--               代码为:                                                                     -->
Log4Net最简单的使用配置_AX
<!--        ILog log=LogManager.GetLogger(“Exam.Log”);                                        -->
Log4Net最简单的使用配置_AX
<!--        log.Debug(“Hello”);                                                               -->
Log4Net最简单的使用配置_AX
<!--            则输出为下面的形式:                                                            -->
Log4Net最简单的使用配置_AX
<!--        Exam.Log       - Hello                                                              -->
Log4Net最简单的使用配置_AX
<!--        %L:输出语句所在的行号                                                              -->
Log4Net最简单的使用配置_AX
<!--        %F:输出语句所在的文件名                                                            -->
Log4Net最简单的使用配置_AX
<!--        %-数字:表示该项的最小长度,如果不够,则用空格填充                                  -->
Log4Net最简单的使用配置_AX
<!--        例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: -->
Log4Net最简单的使用配置_AX
<!--        176 [main] INFO  org.foo.Bar - Located nearest gas station.                         -->
Log4Net最简单的使用配置_AX
<!--                                                                                        -->
Log4Net最简单的使用配置_AX
<!--========================================================================================-->

 

Ⅲ.在Default.aspx.cs的Page_Load里添加如下代码.

 

Log4Net最简单的使用配置_AX    protected void Page_Load(object sender, EventArgs e)
    }

 

F5,在项目目录下找到Log文件夹的AX.txt ,这个就是刚刚生成的日志文件.

 

【写日志的原则】

Ⅰ.在catch后,把异常写入日志.

Ⅱ.在调用第三方控件的开始和结束处.

Ⅲ.在连接数据库的开始结束处.

Ⅳ.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增.

Ⅴ.在自己认为很重要的逻辑处写入日志.

 

【注意】

发现有重要问题时最好用邮件日志,但不要指望上面的邮件配置节能发日志.

要使用能用的smtp服务器,163的只有部分用户能用.我的就不能用,很是郁闷.

要合理配置下列参数.

Ⅰ.日志文件的大小

Ⅱ.备份的日志名样式,最好时间精确到分

 

 

相关文章: