log4net使用

说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging.apache.org/log4net/下载。现在的最新版本是1.2.10。

下面的例子展示了如何利用log4net记录日志 。

Log4日志组件的应用确实简单实用,在比较了企业库和Log4的日志功能后,个人觉得Log4的功能更加强大点.补充说明下,我使用的企业库是2.0版本,Log4net是1.2.1版本的.

在Log4net的应用上,已经有人做了说明分析了,在本文中,主要解析下Log4net中的RollingFileAppender的应用.

主要参考了Log4net的帮助文档.在项目中的log4net-1.2.10/doc文件下有.


RollingFileAppender主要是基于FileAppender构建的,很多属性方法都是继承于FileAppender,所以在选项设置上,也有许多是相同的.

下面的例子使日志文件名为log.txt,日志文件名是以文件大小进行变换的,如果旧日志文件大小到100KB时,就会变换文件名为log.txt.1,log.txt.2,log.txt.3...,一直到10为止

  1. <appendername="RollingFileAppender"type="log4net.Appender.RollingFileAppender">
  2. <!--日志文件名-->
  3. <filevalue="log.txt"/>
  4. <!--是否在文件中追加-->
  5. <appendToFilevalue="true"/>
  6. <!--按照文件的大小进行变换日志文件-->
  7. <rollingStylevalue="Size"/>
  8. <!--最大变换数量-->
  9. <maxSizeRollBackupsvalue="10"/>
  10. <!--最大文件大小-->
  11. <maximumFileSizevalue="100KB"/>
  12. <!--日志文件名是否为静态-->
  13. <staticLogFileNamevalue="true"/>
  14. <layouttype="log4net.Layout.PatternLayout">
  15. <conversionPatternvalue="%date[%thread]%-5level%logger[%property{NDC}]-%message%newline"/>
  16. </layout>
  17. </appender>

下面的例子以时间周期变换日志文件名,每分钟都改变日志的文件名,日志文件名为logfileyyyyMMdd-HHmm,这里补充说明下,如果要在这个文件名后面加上.log后缀,必须使用转义字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

  1. <appendername="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender">
  2. <!--日志文件名开头-->
  3. <filevalue="logfile"/>
  4. <!--是否追加到文件-->
  5. <appendToFilevalue="true"/>
  6. <!--变换的形式为日期-->
  7. <rollingStylevalue="Date"/>
  8. <!--日期的格式-->
  9. <datePatternvalue="yyyyMMdd-HHmm"/>
  10. <layouttype="log4net.Layout.PatternLayout">
  11. <conversionPatternvalue="%date[%thread]%-5level%logger[%property{NDC}]-%message%newline"/>
  12. </layout>
  13. </appender>

下面的例子综合使用使用日期和文件大小变换日志文件名。

  1. <appendername="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender">
  2. <!--日志文件名开头-->
  3. <filevalue="logfile"/>
  4. <!--是否追加到文件-->
  5. <appendToFilevalue="true"/>
  6. <!--混合使用日期和文件大小变换日志文件名-->
  7. <rollingStylevalue="Composite"/>
  8. <!--日期的格式-->
  9. <datePatternvalue="yyyyMMdd"/>
  10. <!--最大变换数量-->
  11. <maxSizeRollBackupsvalue="10"/>
  12. <!--最大文件大小-->
  13. <maximumFileSizevalue="1MB"/>
  14. <layouttype="log4net.Layout.PatternLayout">
  15. <conversionPatternvalue="%date[%thread]%-5level%logger[%property{NDC}]-%message%newline"/>
  16. </layout>
  17. </appender>

下面例子是在每次程序运行的时候,都会备份原先的日志文件,当运行的日志文件大于50G的时候才会变换日志文件名。

  1. <appendername="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender">
  2. <!--日志文件名-->
  3. <filevalue="logfile.txt"/>
  4. <!--不追加到原文件-->
  5. <appendToFilevalue="false"/>
  6. <!--以日志文件大小变换文件名-->
  7. <rollingStylevalue="Size"/>
  8. <!--最大变换数量,-1为不限制-->
  9. <maxSizeRollBackupsvalue="-1"/>
  10. <!--最大文件大小-->
  11. <maximumFileSizevalue="50GB"/>
  12. <layouttype="log4net.Layout.PatternLayout">
  13. <conversionPatternvalue="%date[%thread]%-5level%logger[%property{NDC}]-%message%newline"/>
  14. </layout>
  15. </appender>

下面是RollingFileAppender类中的部分Public Instance Properties(公共属性)的说明,没有全部测试,难免谬误,如果你知道,请不要吝啬告写。
CountDirection : 定义当前文件是最小编号的文件还是最大编号的文件。默认为-1,总是以更小的编号。
datePattern : DateFormatter日期格式,string类型。
Encoding : 就是文件的编码,默认为Default,就是程序本身的编码了。
FilterHead : 分割符头部。
ImmediateFlush : 表示是否立即输出到文件,布尔型的。
LockingModel : 文件锁类型,RollingFileAppender本身不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全。有两中类型:FileAppender.ExclusiveLockFileAppender.MinimalLock
Name
: 设置本Appander的名称。
SecurityContext : 比较少应用,对日志进行加密只类的,使用SecurityContextProvider转换。(对日志的保密要求比较高的时候应该可以应用上吧,Log4考虑的还挺周全)
Threshold : 设置内容级别的,比如:DEBUG,INFO等等。

在Log4net的配置中有两种方法是等价的:
<param name="File" value="log.txt" />
<File value="log.txt" />
个人更倾向后者。在一些数据库上的应用时还有许多Param呢。

追加:懒人ABC使用后的一些例子


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xmlversion="1.0"encoding="utf-8"?>
<configuration>
<configSections>
<sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/>
</configSections>
<log4net>
<!--<root>

<appender-refref="LogFileAppender"/>

</root>-->
<!--TheconfigofSystem'sdefaultlevel-FATAL-->
<appendername="FATAL"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="Log/gateway_system_fatal_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="100KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="yyyyMMdd&quot;.log&quot;"/>
<!--paramname="RollingStyle"value="Date"/-->
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%d%thread%p%class%M%L%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="FATAL"/>
<paramname="LevelMax"value="FATAL"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-ERROR-->
<appendername="ERROR"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="log/gateway_system_error_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="100KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="yyyyMMdd&quot;.log&quot;"/>
<!--paramname="RollingStyle"value="Date"/-->
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%d%thread%p%class%M%L%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="ERROR"/>
<paramname="LevelMax"value="ERROR"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-WARN-->
<appendername="WARN"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="log/gateway_system_warn_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="100KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="yyyyMMdd&quot;.log&quot;"/>
<!--paramname="RollingStyle"value="Date"/-->
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%d%thread%p%class%M%L%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="WARN"/>
<paramname="LevelMax"value="WARN"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-INFO-->
<appendername="INFO"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="log/gateway_system_info_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="1KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="yyyyMMdd&quot;.log&quot;"/>
<!--paramname="RollingStyle"value="Date"/-->
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%d%thread%p%class%M%L%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="INFO"/>
<paramname="LevelMax"value="INFO"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-DEBUG-->
<appendername="DEBUG"type="log4net.Appender.RollingFileAppender">
<paramname="File"value="log/gateway_system_debug_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="100KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="yyyyMMdd&quot;.log&quot;"/>
<!--paramname="RollingStyle"value="Date"/-->
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="%d%thread%p%class%M%L%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="DEBUG"/>
<paramname="LevelMax"value="DEBUG"/>
</filter>
</appender>

<loggername="logger">
<levelvalue="DEBUG"/>
<appender-refref="DEBUG"/>
<appender-refref="INFO"/>
<appender-refref="WARN"/>
<appender-refref="ERROR"/>
<appender-refref="FATAL"/>
</logger>

</log4net>

</configuration>


新的配置


<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xmlversion="1.0"encoding="utf-8"?>
<configuration>
<configSections>
<sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>


<log4net>
<!--TheconfigofSystem'sdefaultlevel-FATAL-->
<appendername="FATAL"type="RealEstate.Common.Log.RealEstateRollingFileAppender">
<paramname="File"value="Log/fatal_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="10KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="'.'yyyyMMdd'.log'"/>
<paramname="PrintFlag"value="true"/>
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="[%p][%d{yyyy/MM/ddHH:mm:ss.fff}][Thread=%thread]%class(%L)%M-%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="FATAL"/>
<paramname="LevelMax"value="FATAL"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-ERROR-->
<appendername="ERROR"type="RealEstate.Common.Log.RealEstateRollingFileAppender">
<paramname="File"value="log/error_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="100KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="'.'yyyyMMdd'.log'"/>
<paramname="PrintFlag"value="true"/>
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="[%p][%d{yyyy/MM/ddHH:mm:ss.fff}][Thread=%thread]%class(%L)%M-%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="ERROR"/>
<paramname="LevelMax"value="ERROR"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-WARN-->
<appendername="WARN"type="RealEstate.Common.Log.RealEstateRollingFileAppender">
<paramname="File"value="log/warn_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="10KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="'.'yyyyMMdd'.log'"/>
<paramname="PrintFlag"value="true"/>
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="[%p][%d{yyyy/MM/ddHH:mm:ss.fff}][Thread=%thread]%class(%L)%M-%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="WARN"/>
<paramname="LevelMax"value="WARN"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-INFO-->
<appendername="INFO"type="RealEstate.Common.Log.RealEstateRollingFileAppender">
<paramname="File"value="log/info_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="10KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="'.'yyyyMMdd'.log'"/>
<paramname="PrintFlag"value="true"/>
<encodingvalue="utf-8"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="[%p][%d{yyyy/MM/ddHH:mm:ss.fff}][Thread=%thread]%class(%L)%M-%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="INFO"/>
<paramname="LevelMax"value="INFO"/>
</filter>
</appender>

<!--TheconfigofSystem'sdefaultlevel-DEBUG-->
<appendername="DEBUG"type="RealEstate.Common.Log.RealEstateRollingFileAppender">
<paramname="File"value="log/debug_"/>
<paramname="AppendToFile"value="true"/>
<paramname="RollingStyle"value="Composite"/>
<paramname="MaxSizeRollBackups"value="100"/>
<paramname="MaximumFileSize"value="10KB"/>
<paramname="StaticLogFileName"value="false"/>
<paramname="DatePattern"value="'.'yyyyMMdd'.log'"/>
<paramname="PrintFlag"value="false"/>
<layouttype="log4net.Layout.PatternLayout">
<paramname="ConversionPattern"value="[%p][%d{yyyy/MM/ddHH:mm:ss.fff}][Thread=%thread]%class(%L)%M-%m%n"/>
</layout>
<filtertype="log4net.Filter.LevelRangeFilter">
<paramname="LevelMin"value="DEBUG"/>
<paramname="LevelMax"value="DEBUG"/>
</filter>
</appender>

<!--Thebasicconfig-->
<root>
<!--Thewholeswitch.(Whosethelevelisgreaterthanorequalstothiswillbedisplay)-->

<levelvalue="INFO"/>
<!--appender-refref="DEBUG"/-->
<appender-refref="INFO"/>
<appender-refref="WARN"/>
<appender-refref="ERROR"/>
<!--appender-refref="FATAL"/-->
</root>

</log4net>

</configuration>

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->//******************************************************************************
//@fileRealEstateRollingFileAppender.cs
//@namespaceRealEstate.Common.Log
//@briefRealEstateのFileAppender
//@version1.0
//@date2009/03/12
//@authorDesign:XXX/2009/03/12
//@authorCode:XXX/2009/03/12
//@authorModify:XXX/2009/03/12
//@noteModule:Common
//******************************************************************************

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usinglog4net.Appender;
usinglog4net.Core;

namespaceRealEstate.Common.Log
{
///<summary>
///ログファイルクラス
///</summary>
publicclassRealEstateRollingFileAppender:RollingFileAppender
{
///<summary>
///ログが出力するかどうかのフラグ
///</summary>
privateboolprintFlag=true;

///<summary>
///ログが出力するかどうかのフラグを取得、設定
///</summary>
publicboolPrintFlag
{
get{returnprintFlag;}
set{printFlag=value;}
}

///<summary>
///ログを出力する
///</summary>
///<paramname="loggingEvent">ログ情報</param>
overrideprotectedvoidAppend(LoggingEventloggingEvent)
{
//ログが出力の場合
if(printFlag)
{
//ログレベルによって、ログを出力する
stringloggerName=loggingEvent.Level.Name;
stringname=base.Name;
if(loggerName==name)
{
base.Append(loggingEvent);
}
}
}
}
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx

你可能感兴趣的:(log)