zoukankan      html  css  js  c++  java
  • Log4net 使用简明手册[转]

    Log4net 使用简明手册

    2008-09-08 来源:网络

     

    常见面,却不怎么用,究其原因还是觉得太复杂了点。不过,这东西出现次数越来越频繁,也只好写点东西,以备后用。本文仅对 Log4net 的使用做个简要说明,所有涉及到扩展和开发的部分一概忽略。

    使 用 Log4net,需要熟悉的东东有 Logger、Appender 以及 Layout。Logger 是日志记录器,我们使用其相关方法来完成日志记录;Appender 用于设置日志的存储方式和位置,Logger 的配置中会绑定一个或多个 Appender;Layout 关联具体的 Appender,用于设置日志字符串的格式。

    1. Logger

    所有的记录器都必须实现 ILog 接口,该接口提供日志记录所需的大量方法。

    public interface ILog : ILoggerWrapper
    {
      void Debug(...);
      void Error(...);
      void Fatal(...);
      void Info(...);
      void Warn(...);

      bool IsDebugEnabled { get; }
      bool IsErrorEnabled { get; }
      bool IsFatalEnabled { get; }
      bool IsInfoEnabled { get; }
      bool IsWarnEnabled { get; }
    }

    通常情况下,我们通过 LogManager.GetLogger() 来获取一个记录器。LogManager 内部维护一个 hashtable,保存新创建 Logger 引用,下次需要时直接从 hashtable 获取其实例。

    ILog log = LogManager.GetLogger(this.GetType());     
    log.Debug("aaaaaaaaaaaaaaa");  

    所有 Logger 的参数设置都直接或间接继承自 root,其继承关系类似 namespace。比如,名为 "MyLogger.X.Y" 参数设置继承自 "MyLogger.X"。当我们创建 "MyLooger.X.Y" 记录器时,会在配置文件找该名称的记录器设置,如果没找到,则按继承关系向上查找,直到 root。因此,在创建 Logger 时,我们通常使用类型名称做为记录器的名字,缺省情况下,它会使用 root 或某一个父配置,但在需要的时候,我们随时可以为具体的类型添加一个更加 "详细" 的配置。

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
        </layout>
      </appender>

      <logger name="Learn.Library.Log4netTest">
        <level value="ALL" />
      </logger>

      <root>
        <level value="OFF" />
        <appender-ref ref="Console" />
      </root>
    </log4net>

    在 创建 Logger 设置时,需要注意 "level" 参数。Log4net 允许我们通过该参数调整日志记录级别,只有高于或等于该级别的日志才会被记录下来。比如在代码调试阶段,我们可能希望记录所有的信息,而在部署阶段,我们 只希望记录级别更高的错误信息。这个参数的好处是允许我们在不修改代码的前提下,随时调整记录级别。

    (高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)

    "appender-ref" 参数用于绑定一个或多个具体的 Appender。
     

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <appender name="Console" type="log4net.Appender.ConsoleAppender">
      </appender>

      <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
      </appender>

      <root>
        <level value="DEBUG" />
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
      </root>
    </log4net>

    2. Appender / Layout

    Log4net 提供了大量的 Appender,最常用的包括 AdoNetAppender、AspNetTraceAppender、ConsoleAppender、FileAppender、 OutputDebugStringAppender。每种 Appender 都有特定一些参数,使用时直接从 《Log4net 手册》的示例中拷贝过去,就OK了。(代码摘自 Log4net 手册)

    (1) AspNetTraceAppender

    <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    (2) ConsoleAppender

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    (3) OutputDebugStringAppender

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    (4) FileAppender

    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    有关 Layout 详细信息,请参考 Log4net 相关文档,本文不做详述。

    3. Configuration

    Log4net 的配置方式十分灵活,即可以写到应用程序配置文件中,也可以使用独立配置文件。同时它还提供了监测配置文件变化的功能,这样我们随时可以调整配置,而无须重启应用程序。

    (1) 使用 app.config / web.config

    app.config / web.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>

      <log4net>
        <appender name="Console" type="log4net.Appender.ConsoleAppender">
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
          </layout>
        </appender>

        <root>
          <level value="DEBUG" />
          <appender-ref ref="Console" />
        </root>
      </log4net>
    </configuration>

    使用代码初始化配置。

    log4net.Config.XmlConfigurator.Configure();

    (2) 使用自定义配置文件

    test.log4net

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <appender name="Console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
        </layout>
      </appender>
      
      <root>
        <level value="DEBUG" />
        <appender-ref ref="Console" />
      </root>
    </log4net>

    使用代码初始化配置。

    log4net.Config.XmlConfigurator.Configure(new FileInfo("test.log4net"));

    使用 XmlConfigurator.ConfigureAndWatch() 方法除了初始化配置外,还会监测配置文件的变化,一旦发生修改,将自动刷新配置。

    (3) XmlConfiguratorAttribute

    我们还可以使用 XmlConfiguratorAttribute 代替 XmlConfigurator.Config()/ConfigureAndWatch(),ConfiguratorAttribute 用于定义与 Assembly 相关联的配置文件名。

    方式1: 关联到 test.log4net,并监测变化。

    [assembly: log4net.Config.XmlConfigurator(ConfigFile="test.log4net", Watch=true)]

    方式2: 关联到 test.exe.log4net (或 test.dll.log4net,文件名前缀为当前程序集名称),并监测变化。

    [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch=true)]

    资料来源:

    http://www.uml.org.cn/net/200809082.asp

  • 相关阅读:
    cookie操作和代理
    发起post请求
    scrapy核心组件
    爬取多个url页面数据--手动实现
    scrapy之持久化存储
    selenium + phantomJs
    scrapy框架简介和基础使用
    校验验证码 实现登录验证
    beautifulsoup解析
    xpath
  • 原文地址:https://www.cnblogs.com/saptechnique/p/1815634.html
Copyright © 2011-2022 走看看