Log4net配置与使用简要说明
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> <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="MaxFileSize" value="10240" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyy-MM-dd.log" /><!--日志文件的风格,例如这个就是'2017-02-21.log'--> <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异 常 类:%c [%x] %n%m %n " /><!--日志内容的显示排版风格,但不好意思,各个参数我也没去研究是什么意思,我自己都是用惯这样的排版--> </layout> </appender> <appender name="MyConsoleAppender" type="log4net.Appender.ConsoleAppender" ><!--这里定义一个名叫"MyConsoleAppender"的,类型为ConsoleAppender的appender,可以被下边的logger所使用--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> <filter type="log4net.Filter.StringMatchFilter"><!--过滤器,匹配包含某些字符的log--> <stringToMatch value="stringToMatch" /> </filter> </appender> <root><!--设定log4net继承层次中的根logger,相似于c#中的object,所有的logger会继承root的配置--> <level value="INFO" /> <appender-ref ref="ConsoleAppender" /><!--指定根logger默认使用"MyConsoleAppender"--> </root> <logger name="SomeLoggerFoo"><!--未某个具体名字的logger进行配置,例如在代码中 LogManager.GetLogger("SomeLoggerFoo"),那么该logger就会使用这个配置--> <level value="INFO" /> <appender-ref ref="ConsoleAppender" /> <!--指定使用哪个appnder--> </logger> <logger name="myErrorAppender"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> </log4net>
以上是log4net比较粗略的配置和使用说明,如果需要更详细的信息,请参考log4net官网:
http://logging.apache.org/log4net/
水平有限难免有误敬请指正