【码农世界】Log4net配置与使用简要说明

  • 管理员 发布于 2019-12-26
  • 栏目:技术宅男
  • 来源:本站
  • 人围观
  • 个不明物体

log4net详细配置:
http://logging.apache.org/log4net/
本文描述如有错误,以官网的说明为准;p

一:先来看看log4net中的几个概念:


1. log4net继承机制


log4net通过logger的名字与"."符号来体现继承层次,类似于c#的命名空间,例如:

var loggerA=LogManager.GetLogger("a");var loggerB=LogManager.GetLogger("a.b");

那么,loggerB继承了loggerA,如果没有为loggerB指定appender或者level,将会使用loggerB的appender或者level. by the way,另一个获取logger的方法:GetLogger(typeof(SomeClass))会新建一个名为"SomeClass"的logger

2. appender

appender:负责将log写入何处。log4net中内置了很多种appnder:
FileAppender:将log写入文件中。
RollingFileAppender:将log写入到文件中,并可以按某些条件(例如按日期或者按文件大小)来划分不同文件,例如希望每天一个log文件,或者每个文件1M等等。
AdoNetAppender:将log通过ado.net写入到数据库。
ConsoleAppender:将log输出到console中。
log4net中内置了非常多的appender,详细请参考:
http://logging.apache.org/log4net/release/manual/introduction.html

3. Level

level是指日志级别,日志级别从低到高分为:
ALL
DEBUG --调试
INFO --信息
WARN --警告
ERROR --错误
FATAL --致命
OFF

一个logger只会记录级别比这个logger设定的级别要大的log,例如,一个logger的级别为ERROR(如何设定logger的日志级别会在下面提及),当 logger.Info("this's a log of info level")时,log将不会被记录,因为logger以Info()方法记录该log,意味着该log的级别是INFO,但logger的级别是ERROR,大于INFO,所以不会记录该log。但logger.Error("this's a log of error level")或者logger.Fatal("this's a log of fatal level")时,则会记录该log。

4. Filter

filter代表appender的过滤器,可以设置appender以某种方式过滤(不记录)日志。例如,LevelMatchFilter用于设定只记录某个级别的日志,StringMatchFilter用于设定只记录日志里包含某些字眼的日志。
如何设置Filter将会在下面提及,但更多的Filter用法请参考:http://logging.apache.org/log4net/release/manual/configuration.html

5. Layout

layout用于设置日志的排版格式。(这个通常用默认的,比较少自己配置,不懂~ 具体请看:http://logging.apache.org/log4net/release/manual/configuration.html


二: 如何配置log4net

log4net支持在代码中设定logger(appender,level,filter等),但推荐通过配置文件来进行配置。
配置文件的方式也分为2种:

1.在项目的配置文件中(web.config,app.config)中添加配置节来实现

2.指定一个独立的配置文件的方式来配置。

在项目配置文件中进行配置和使用步骤:

a.先在项目配置文件中定义一个配置节:

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

b.然后在项目配置文件中添加"log4net"配置节: 

<log4net>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\\LogError\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="100" />
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n " />
      </layout>
    </appender>
    <root>
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </root>
  </log4net>

c.调用 XmlConfigurator.Configure()方法启用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性来启用配置(log4net推荐使用程序集特性的方式来进行配置。只需要在项目的Properties/AssemblyInfo.cs中添加该程序集特性即可)

 指定一个独立的配置文件步骤:

a.在项目根目录中(根目录是默认位置,但可以指定其他位置,这里不作说明;p)新建一个任意文件名的xml文件,例如"log4net.config"。
b.在该xml文件中进行配置,xml文件的内容和上一种配置方式的log4net配置节一样,只是单独放到一个xml文件中而已。
c.调用XmlConfigurator.ConfigureAndWatch()方法启用配置,或者使用[assembly: log4net.Config.XmlConfigurator()] 特性来启用配置。

三:配置文件大概解释(只是常用的,大概的描述,具体的请参考官网)

<log4net>
    <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>
    <logger name="logwarn">
      <level value="WARN" />
      <appender-ref ref="WarnAppender" />
    </logger>
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="log/error/" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <param name="Encoding" value="UTF-8" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异常位置:[%thread] (%file:%line) %n消息描述:%message%n异常:%exception%n%n " />
      </layout>
    </appender>
    <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="log/warn/" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <param name="Encoding" value="UTF-8" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n消息描述:%m %n " />
      </layout>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <!--设置日志存储路径-->
      <param name="File" value="log/info/" />
      <!--是否追加到文件-->
      <param name="AppendToFile" value="true" />
      <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100" />
      <param name="MaxFileSize" value="1024" />
      <!--是否只写到一个文件中-->
      <param name="StaticLogFileName" value="false" />
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <param name="RollingStyle" value="Date" />
      <param name="Encoding" value="UTF-8" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n消息描述:%m %n " />
      </layout>
    </appender>
  </log4net>

 

以上是log4net比较粗略的配置和使用说明,如果需要更详细的信息,请参考log4net官网:

http://logging.apache.org/log4net/

微信截图_20191226134901.png


欢迎踩踏本文章
标签: 码农世界

来说点啥吧

看人家说的