0°

log4net的配置及应用

log4net的配置及应用

概述

log4net是第三方类库,所以可以在http://logging.apache.org/log4net/download_log4net.cgi或者vs自带的nuget上直接搜索log4net下载,下载完毕后添加引用log4net就可以使用了。

log4net主要有三个组件:logger,appender和layout。这三个组件一起工作使得开发者能够根据信息类型和等级记录信息,以及在运行时控制信息的格式和信息的写入位置(控制台,文件,内存,数据库等)。

配置及应用

不管是将日志内容写入哪里,先要在appconfig或者webconfig进行如下配置:

"log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>configSections>
  
    
  log4net>

注意:section节点的name对应的是configSections之后的节点名称(比如当前的log4net节点)

接下来,如果是要将日志信息写入控制台,则在log4net节点下做如下配置:

<root>
<level value="all"/>      
<appender-ref ref="ConsoleAppender"/>
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net"><layout type="log4net.Layout.PatternLayout,log4net"><param name="ConversionPattern" value="%d:%m  [优先级]:%p%n"/>layout>
appender>

log4net的日志级别有五个,分别是debug调试级别、info消息级别、warn警告级别、error错误级别、fatal毁灭级别,它们的优先级从低到高依次递增。

level节点的value的值为输出级别控制,如果value为all,则允许所有级别的日志进行输出,如果为off,则拒绝所有级别的日志进行输出,如果为info,则只会输出级别大于等于info的日志信息。

layout节点的param节点的value的值表示的是输出日志的格式:%d为日志记录的时间,%m为日志消息,%p为优先级,%n为换行;还有其他的例如%t当前语句所在的线程,%r当前程序运行到当前语句输出所消耗的毫秒数,%c当前日志对象的名称,%l输出语句所在的行号等等。

配置信息编写完成后,在主函数里面添加如下代码进行测试:

string logger = "log4netDemo";
ILog log = LogManager.GetLogger(logger);//实例化
log4net.Config.XmlConfigurator.Configure();//读取配置项
log.Debug("debug");
log.Info("info");
log.Warn("warn");
log.Error("erron");

log.Fatal(“fatal”);运行后的程序如图所示:

log4net的配置及LogHelper的简单封装

注意:在配置完成后,要将系统自动生成的starup节点放在configSections节点后,因为log4net指定configSections必须为所读取的第一个节点,如果不是,运行后将报错。

这只是在控制台输出日志的配置,还有如果将日志记录在文本文件中,则需要在log4net节点中做如下配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><param name="file" value="log_"/><param name="appendtofile" value="true"/><param name="maximumfilesize" value="10mb"/><param name="maxsizeRollbackups" value="10"/>     
      <param name="staticlogfilename" value="false"/><param name="datepattern" value="yyyy-MM-dd'.txt'"/><param name="rollingstyle" value="composite"/><param name="lockingmodel" type="log4net.Appender.FileAppender+MinimalLock"/><layout type="log4net.Layout.PatternLayout"><param name="conversionpattern" value="%d:%m  [优先级]:%p%n"/>layout>
    appender>

这些语句的作用如下:

:文件命名

:日志以追加的方式进行记录,value如果为false,则是覆盖模式

:限定每个日志文件不超过10mb

:表明文件大小到达限制后会产生一个新的文件,如a.1,a.2….如果到达a.10那么再满就会覆盖第一个文件了

:表明文件名称是可变的,如果为true则不能生成rolling文件

:指定文件名的日期格式

:这是文件的命名方式,composite指文件名同时按date和size命名,如果参数为file参数为log_那么文件名为log_时间.txt,另外该枚举的另外三个取值为once(每次启动程序新生成一个文件)、size和date

:减少并发时发生死锁的概率

最后layout就是日志信息输出的格式了

然后在root节点下添加这代码“”就可以直接运行了,运行后生成的文件如图所示:

log4net的配置及LogHelper的简单封装

如果要将日志信息写入数据库,则需要新建数据表,我用的是sqlserver:

create table MyLog
(
  Id int identity(1,1) not null,
  [Date] datetime not null,
  Thread varchar(255) not null,
  [Level] varchar(50) not null,
  Logger varchar(50) not null,
  [Message] varchar(4000) not null,
  Exception varchar(2000) not null
)

数据表新建完成后,在log4net中进行以下配置:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"><bufferSize value="1"/><connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><connectionString value="server=192.168.162.128;database=LogDB;user id=sa;password=123"/><commandText value="insert  MyLog  values (@date, @thread, @level, @logger, @message, @exception)" /><parameter><parameterName value="@date"/><dbType value="DateTime"/>       
        <layout type="log4net.Layout.RawTimeStampLayout"/>parameter>
      <parameter><parameterName value="@thread"/><dbType value="string"/><size value="255"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%t"/>layout>
      parameter>
    <parameter><parameterName value="@level"/><dbType value="string"/><size value="50"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%l"/>layout>
      parameter>
    <parameter><parameterName value="@logger"/><dbType value="string"/><size value="50"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%logger"/>layout>
      parameter>
    <parameter><parameterName value="@message"/><dbType value="string"/><size value="4000"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%m"/>layout>
      parameter>
    <parameter><parameterName value="@exception"/><dbType value="string"/><size value="4000"/><layout type="log4net.Layout.ExceptionLayout"/>parameter>
    appender>

然后在root节点加上“”这句话,在主函数中写入如下代码:

ILog log = LogManager.GetLogger("logger");
try
{
       log4net.Config.XmlConfigurator.Configure();
       log.Debug("开始debug了");
       int.Parse("ddd");
}
catch(Exception ex)
{
       log.Error("Error",ex);
}

运行程序后,查询该表,就可以查询到两条日志信息,一条为debug信息,一条为error信息。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
Arduino
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论