log4net 使用

来源:互联网 发布:淘宝开店详细流程 编辑:程序博客网 时间:2024/05/01 11:03

1.简介

log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具.它是针对Java的log4j(Log For Java的)姊妹工具.用过log4j的都知道,它功能强大,可配置性灵活,线程安全,对日志的输出管理和级别管理方便,可以从http://logging.apache.org/log4net/download_log4net.cgi下载log4net的源代码。同log4j一样(java下的日志记录组件)用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。是一个开源项目. 可以以插件的形式应用在你的系统中。程序员在使用ErrorLog做日志记录的时候完全不用关心log4net的工作方式,只需简单的调用即可

2.使用

1.引用log4net.dll到项目中

2.项目配置文件中配置log4net,web中对应的是web.config文件,winform对应的是app.config

在web.cofig根节点 configuration 中加入如下section:

<configSections> 
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

同时在configuration 根节点下加入下面的节点,

 <log4net>
    
<!--定义输出到文件中-->
    
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      
<!--定义文件存放位置-->
      
<file value="D:/log4netfile.txt" />
      
<appendToFile value="true" />
      
<rollingStyle value="Date" />
      
<datePattern value="yyyyMMdd-HH:mm:ss" />
      
<layout type="log4net.Layout.PatternLayout">
        
<!--每条日志末尾的文字说明-->
        
<footer value="testla" />
        
<!--输出格式-->
        
<!--样例-->
        
<conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
      
</layout>

<filter levelMin="DEBUG"/>

<filter levelMax="WARN"/>
    
</appender>
    
<!--定义输出到控制台命令行中-->
    
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      
</layout>
    
</appender>
    
<!--定义输出到windows事件中-->
    
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      
<layout type="log4net.Layout.PatternLayout">
        
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      
</layout>
    
</appender>
    
<!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    
<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      
<connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      
<commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      
<!--定义各个参数-->
      
<parameter>
        
<parameterName value="@logDate" />
        
<dbType value="String" />
        
<size value="240" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%date" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@thread" />
        
<dbType value="String" />
        
<size value="240" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%thread" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@logLevel" />
        
<dbType value="String" />
        
<size value="240" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%level" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@logger" />
        
<dbType value="String" />
        
<size value="240" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%logger" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@message" />
        
<dbType value="String" />
        
<size value="240" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%message" />
        
</layout>
      
</parameter>
    
</appender>
    
<!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    
<root>

     <level value="DEBUG" />
      
<!--文件形式记录日志-->
      
<appender-ref ref="LogFileAppender" />
      
<!--控制台控制显示日志-->
      
<appender-ref ref="ConsoleAppender" />
      
<!--Windows事件日志-->
      
<appender-ref ref="EventLogAppender" />
      
<!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      
-->
    
</root>
    
  
</log4net>

3.启动application时,启动log4net

web中在Global.asax.cs的Application_Start过程中添加如下代码:
log4net.Config.DOMConfigurator.Configure();//新版本log4net,可能会提示你用新的方法代替,

winform中在main函数在的类的namespace上面声明如下attr即可 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

4.调用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");

ps:日志就会根据你的配置输出到对应的地方了

5.关于配置中ConversionPattern 的转换符

每种转换符号都以%开始,后面跟着一个格式符号和换符号。

%-数字 :该项的最小长度,小于最小长度的用空格填充

%m(message):输出的日志消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称,

%L(line ):输出语句所在的行号

%F(file name):输出语句所在的文件名

如 "%-5p [%t]- %m%n" 

log4net.ILog M_Log = LogManager.GetLogger(this.GetType());

M_Log .Debug("Test");

生成输出为

DEBUG [main]- Test

6、level级别

在配置文件的ROOT里有<level value="DEBUG" />设置级别的语句level 有 ALL<DEBUG <INFO<WARN<ERROR<FATAL<OFF 这么几级,大小关系也是这样 如果你调用 m_log.Info("message") 即是INFO级别,如果设置的级别为<level value="ERROR" />那就输出不到日志文件,相反如果低于就能输出  

另一个.net开源日志工具,NLog使用地址:http://blog.csdn.net/xuwei_xuwei/article/details/30040463
0 0
原创粉丝点击