我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net

回到目录

在项目中有统一的日志是很必要的,之前自己写过vlog项目,这个项目与现在比较流行的log4net很像,用起来也很方便,今天主要说一下log4net这个日志工具,这使用vs2012测试的,使用nuget把log4net组件添加到项目中,如图:

然后在项目里为log4net建立一个配置文件,可以命名为log4net.config,一般代码如下:

<log4net>
  <logger name="loginfo">
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </logger>
  <!--定义输出到文件中-->
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <!--定义文件存放位置-->
    <file value="log4netfile.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <!--每条日志末尾的文字说明-->
      <footer value="by 占占" />
      <!--输出格式-->
      <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
      <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
    </layout>
  </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>
  <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
</log4net>

在log4net中日志记录方法有文本文件,WINDOWS日志,SQL数据库等等,你可以自己去配置,对于日志级别,它提供了fatal,error,warn,debug和info

你可以根据自己的需要进行选择。

     static JobBase()
        {
            log4net.Config.XmlConfigurator.Configure();//加载app.config中的配置
        }

        /// <summary>
        /// log4日志对象
        /// </summary>
        protected log4net.ILog Logger = log4net.LogManager.GetLogger("Core.Logger");

如果你的log4net不在app.config中配置,而是单独在指定的配置文件中,也可以使用下面的方法

 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Environment.CurrentDirectory + @"\log4net.config"));

log4net也并非是完美,在使用上还有一些问题,但它应用面太广,被很多开源项目使用,所以,咱们也只好用它了,呵呵。

回到目录

posted @ 2013-05-17 13:50  张占岭  阅读(2065)  评论(2编辑  收藏  举报