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. <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">  
  2.         <!--日志文件名-->
  3.     <file value="log.txt"/>
  4.     <!--是否在文件中追加-->
  5.     <appendToFile value="true"/>
  6.     <!--按照文件的大小进行变换日志文件-->
  7.     <rollingStyle value="Size"/>
  8.     <!--最大变换数量-->
  9.     <maxSizeRollBackups value="10"/>
  10.     <!--最大文件大小-->
  11.     <maximumFileSize value="100KB"/>
  12.     <!--日志文件名是否为静态-->
  13.     <staticLogFileName value="true"/>
  14.     <layout type="log4net.Layout.PatternLayout">
  15.         <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
  16.     </layout>
  17. </appender>

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

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

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

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

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

  1. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  2.     <!--日志文件名-->
  3.     <file value="logfile.txt" />
  4.     <!--不追加到原文件-->
  5.     <appendToFile value="false" />
  6.     <!--以日志文件大小变换文件名-->
  7.     <rollingStyle value="Size" />
  8.     <!--最大变换数量,-1为不限制-->
  9.     <maxSizeRollBackups value="-1" />
  10.     <!--最大文件大小-->
  11.     <maximumFileSize value="50GB" />
  12.     <layout type="log4net.Layout.PatternLayout">
  13.         <conversionPattern value="%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使用后的一些例子

 


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/>
  
</configSections>
  
<log4net>
    
<!--<root>
      
      
<appender-ref ref="LogFileAppender" />
     
    
</root>-->
    
<!--The config of System's default level - FATAL-->
    <appender name="FATAL" type="log4net.Appender.RollingFileAppender">
      
<param name="File" value="Log/gateway_system_fatal_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="100KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      
<!--param name="RollingStyle" value="Date"/-->
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d %thread  %p %class %M %L %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="FATAL"/>
        
<param name="LevelMax" value="FATAL"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - ERROR-->
    <appender name="ERROR" type="log4net.Appender.RollingFileAppender">
      
<param name="File" value="log/gateway_system_error_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="100KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      
<!--param name="RollingStyle" value="Date"/-->
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d %thread  %p %class %M %L %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="ERROR"/>
        
<param name="LevelMax" value="ERROR"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - WARN-->
    <appender name="WARN" type="log4net.Appender.RollingFileAppender">
      
<param name="File" value="log/gateway_system_warn_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="100KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      
<!--param name="RollingStyle" value="Date"/-->
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d %thread  %p %class %M %L %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="WARN"/>
        
<param name="LevelMax" value="WARN"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - INFO-->
    <appender name="INFO" type="log4net.Appender.RollingFileAppender">
      
<param name="File" value="log/gateway_system_info_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="1KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      
<!--param name="RollingStyle" value="Date"/-->
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d %thread  %p %class %M %L %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="INFO"/>
        
<param name="LevelMax" value="INFO"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - DEBUG-->
    <appender name="DEBUG" type="log4net.Appender.RollingFileAppender">
      
<param name="File" value="log/gateway_system_debug_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="100KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
      
<!--param name="RollingStyle" value="Date"/-->
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d %thread  %p %class %M %L %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="DEBUG"/>
        
<param name="LevelMax" value="DEBUG"/>
      
</filter>
    
</appender>

    
<logger name="logger">
      
<level value="DEBUG" />
      
<appender-ref ref="DEBUG" />
      
<appender-ref ref="INFO" />
      
<appender-ref ref="WARN" />
      
<appender-ref ref="ERROR" />
      
<appender-ref ref="FATAL" />
    
</logger>

  
</log4net>

</configuration>


新的配置


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  
</configSections>
      
     
  
<log4net>
    
<!--The config of System's default level - FATAL-->
    
<appender name="FATAL" type="RealEstate.Common.Log.RealEstateRollingFileAppender">
      
<param name="File" value="Log/fatal_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="10KB"/>
      
<param name="StaticLogFileName" value="false"/>
        
<param name="DatePattern" value="'.'yyyyMMdd'.log'"/>
      
<param name="PrintFlag" value="true" />
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="[%p][%d{yyyy/MM/dd HH:mm:ss.fff}] [Thread=%thread] %class(%L) %M - %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="FATAL"/>
        
<param name="LevelMax" value="FATAL"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - ERROR-->
    
<appender name="ERROR" type="RealEstate.Common.Log.RealEstateRollingFileAppender">
      
<param name="File" value="log/error_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="100KB"/>
      
<param name="StaticLogFileName" value="false"/>
        
<param name="DatePattern" value="'.'yyyyMMdd'.log'"/>
      
<param name="PrintFlag" value="true" />
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="[%p][%d{yyyy/MM/dd HH:mm:ss.fff}] [Thread=%thread] %class(%L) %M - %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="ERROR"/>
        
<param name="LevelMax" value="ERROR"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - WARN-->
    
<appender name="WARN" type="RealEstate.Common.Log.RealEstateRollingFileAppender">
      
<param name="File" value="log/warn_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="10KB"/>
      
<param name="StaticLogFileName" value="false"/>
        
<param name="DatePattern" value="'.'yyyyMMdd'.log'"/>
      
<param name="PrintFlag" value="true" />
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="[%p][%d{yyyy/MM/dd HH:mm:ss.fff}] [Thread=%thread] %class(%L) %M - %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="WARN"/>
        
<param name="LevelMax" value="WARN"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - INFO-->
    
<appender name="INFO" type="RealEstate.Common.Log.RealEstateRollingFileAppender">
      
<param name="File" value="log/info_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="10KB"/>
      
<param name="StaticLogFileName" value="false"/>
        
<param name="DatePattern" value="'.'yyyyMMdd'.log'"/>
      
<param name="PrintFlag" value="true" />
      
<encoding value="utf-8"/>
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="[%p][%d{yyyy/MM/dd HH:mm:ss.fff}] [Thread=%thread] %class(%L) %M - %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="INFO"/>
        
<param name="LevelMax" value="INFO"/>
      
</filter>
    
</appender>

    
<!--The config of System's default level - DEBUG-->
    
<appender name="DEBUG" type="RealEstate.Common.Log.RealEstateRollingFileAppender">
      
<param name="File" value="log/debug_"/>
      
<param name="AppendToFile" value="true"/>
      
<param name="RollingStyle" value="Composite" />
      
<param name="MaxSizeRollBackups" value="100"/>
      
<param name="MaximumFileSize" value="10KB"/>
      
<param name="StaticLogFileName" value="false"/>
      
<param name="DatePattern" value="'.'yyyyMMdd'.log'"/>
      
<param name="PrintFlag" value="false" />
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="[%p][%d{yyyy/MM/dd HH:mm:ss.fff}] [Thread=%thread] %class(%L) %M - %m%n"/>
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="DEBUG"/>
        
<param name="LevelMax" value="DEBUG"/>
      
</filter>
    
</appender>

    
<!--The basic config-->
    
<root>
    
<!--The whole switch.(Whose the level is greater than or equals to this will be display)-->

      
<level value="INFO" />
      
<!--appender-ref ref="DEBUG" /-->
      
<appender-ref ref="INFO" />
      
<appender-ref ref="WARN" />
      
<appender-ref ref="ERROR" />
      
<!--appender-ref ref="FATAL" /-->
    
</root>

  
</log4net>

</configuration>

//******************************************************************************
// @file              RealEstateRollingFileAppender.cs
// @namespace         RealEstate.Common.Log
// @brief             RealEstateのFileAppender
// @version           1.0
// @date              2009/03/12
// @author   Design : XXX/2009/03/12
// @author   Code   : XXX/2009/03/12
// @author   Modify : XXX/2009/03/12
// @note     Module : Common
//******************************************************************************

using System;
using System.Collections.Generic;
using System.Text;
using log4net.Appender;
using log4net.Core;

namespace RealEstate.Common.Log
{
    
/// <summary>
    
/// ログファイルクラス
    
/// </summary>
    public class RealEstateRollingFileAppender : RollingFileAppender
    {
        
/// <summary>
        
/// ログが出力するかどうかのフラグ
        
/// </summary>
        private bool printFlag = true;

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

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

 

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

你可能感兴趣的:(log4net使用)