分享

log4net的使用详解

 咫尺天涯人 2010-11-25
log4net的使用详解
 
log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。要想获取最新版本的log4net组件库,可以到官方网站http://logging./log4net/下载。现在的最新版本是1.2.10。
下面的例子展示了如何利用log4net记录日志 。
首先从官方网站下载最近版本的log4net组件,现在的最新版本是1.2.10。在程序中我们只需要log4net.dll文件就行了,添加对log4net.dll的引用,就可以在程序中使用了。
接着我们配置相关的配置文件(WinForm对应的是*.exe.config,WebForm对应的是*.config),本实例中是控制台应用程序,配置如下(附各配置的说明):
view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8" ?>  
02.<configuration>  
03.  <configSections>  
04.    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>  
05.  </configSections>  
06.  <appSettings>  
07.  </appSettings>  
08.  <log4net>  
09.<!--RollingFileAppender自动截断-->  
10.        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">  
11.            <file value="log\\log.txt"/>  
12.            <appendToFile value="true"/>  
13.            <maxSizeRollBackups value="10"/>  
14.            <maximumFileSize value="2048KB"/>  
15.            <rollingStyle value="Size"/>  
16.            <staticLogFileName value="true"/>  
17.            <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>  
18.            <layout type="log4net.Layout.PatternLayout">  
19.                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>  
20.            </layout>  
21.        </appender>  
22.    <!--定义输出到文件中-->  
23.    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">  
24.      <!--定义文件存放位置-->  
25.      <file value="logs.txt" />  
26.      <appendToFile value="true" />  
27.      <rollingStyle value="Date" />  
28.      <datePattern value="yyyyMMdd-HH:mm:ss" />  
29.      <layout type="log4net.Layout.PatternLayout">  
30.        <!--每条日志末尾的文字说明-->  
31.        <footer value="by author" />  
32.        <!--输出格式-->  
33.        <!--样例:2010-01-06 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->  
34.        <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />  
35.      </layout>  
36.    </appender>  
37.    <!--定义输出到控制台命令行中-->  
38.    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">  
39.      <layout type="log4net.Layout.PatternLayout">  
40.        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />  
41.      </layout>  
42.    </appender>  
43.    <!--定义输出到windows事件中-->  
44.    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">  
45.      <layout type="log4net.Layout.PatternLayout">  
46.        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />  
47.      </layout>  
48.    </appender>  
49.    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->  
50.    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">  
51.      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=log4net.mdb" />  
52.      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />  
53.      <!--定义各个参数-->  
54.      <parameter>  
55.        <parameterName value="@logDate" />  
56.        <dbType value="String" />  
57.        <size value="240" />  
58.        <layout type="log4net.Layout.PatternLayout">  
59.          <conversionPattern value="%date" />  
60.        </layout>  
61.      </parameter>  
62.      <parameter>  
63.        <parameterName value="@thread" />  
64.        <dbType value="String" />  
65.        <size value="240" />  
66.        <layout type="log4net.Layout.PatternLayout">  
67.          <conversionPattern value="%thread" />  
68.        </layout>  
69.      </parameter>  
70.      <parameter>  
71.        <parameterName value="@logLevel" />  
72.        <dbType value="String" />  
73.        <size value="240" />  
74.        <layout type="log4net.Layout.PatternLayout">  
75.          <conversionPattern value="%level" />  
76.        </layout>  
77.      </parameter>  
78.      <parameter>  
79.        <parameterName value="@logger" />  
80.        <dbType value="String" />  
81.        <size value="240" />  
82.        <layout type="log4net.Layout.PatternLayout">  
83.          <conversionPattern value="%logger" />  
84.        </layout>  
85.      </parameter>  
86.      <parameter>  
87.        <parameterName value="@message" />  
88.        <dbType value="String" />  
89.        <size value="240" />  
90.        <layout type="log4net.Layout.PatternLayout">  
91.          <conversionPattern value="%message" />  
92.        </layout>  
93.      </parameter>  
94.    </appender>  
95.    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->  
96.    <root>  
97.      <!--文件形式记录日志-->  
98.<appender-ref ref="RollingFileAppender" />  
99.      <!--<appender-ref ref="LogFileAppender" />-->  
100.      <!--控制台控制显示日志-->  
101.      <appender-ref ref="ConsoleAppender" />  
102.      <!--Windows事件日志-->  
103.      <appender-ref ref="EventLogAppender" />  
104.      <!--   
105.      <appender-ref ref="AdoNetAppender_Access" />  
106.      -->  
107.    </root>      
108.  </log4net>  
109.</configuration> 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
  </appSettings>
  <log4net>
<!--RollingFileAppender自动截断-->
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="log\\log.txt"/>
   <appendToFile value="true"/>
   <maxSizeRollBackups value="10"/>
   <maximumFileSize value="2048KB"/>
   <rollingStyle value="Size"/>
   <staticLogFileName value="true"/>
   <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
   </layout>
  </appender>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!--定义文件存放位置-->
      <file value="logs.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <footer value="by author" />
        <!--输出格式-->
        <!--样例:2010-01-06 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=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>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--文件形式记录日志-->
<appender-ref ref="RollingFileAppender" />
      <!--<appender-ref ref="LogFileAppender" />-->
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
      <!--
      <appender-ref ref="AdoNetAppender_Access" />
      -->
    </root>   
  </log4net>
</configuration>
测试代码
view plaincopy to clipboardprint?
01.using System;  
02.using System.Collections.Generic;  
03.using System.Text;  
04.using System.Windows.Forms;  
05.using System.Reflection;  
06.using log4net;  
07.//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息  
08.//如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件)  
09.//如果是WebForm,则从web.config中读取相关信息  
10.[assembly: log4net.Config.XmlConfigurator(Watch = true)]  
11.namespace Log4NetDemo  
12.{  
13.    /// <summary>  
14.    /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。  
15.    /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。    
16.    /// </summary>  
17.    public class MainClass  
18.    {  
19.        public static void Main(string[] args)  
20.        {  
21.            //Application.Run(new MainForm());  
22.            //创建日志记录组件实例  
23.            ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);  
24.            //记录错误日志  
25.            log.Error("error",new Exception("发生了一个异常"));  
26.            //记录严重错误  
27.            log.Fatal("fatal",new Exception("发生了一个致命错误"));  
28.            //记录一般信息  
29.            log.Info("info");  
30.            //记录调试信息  
31.            log.Debug("debug");  
32.            //记录警告信息  
33.            log.Warn("warn");  
34.            Console.WriteLine("日志记录完毕。");  
35.            Console.Read();  
36.        }  
37.    }  
38.} 
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using log4net;
//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息
//如果是WinForm(假定程序为MyDemo.exe,则需要一个MyDemo.exe.config文件)
//如果是WebForm,则从web.config中读取相关信息
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4NetDemo
{
    /// <summary>
    /// 说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。
    /// 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)。 
    /// </summary>
    public class MainClass
    {
        public static void Main(string[] args)
        {
            //Application.Run(new MainForm());
            //创建日志记录组件实例
            ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            //记录错误日志
            log.Error("error",new Exception("发生了一个异常"));
            //记录严重错误
            log.Fatal("fatal",new Exception("发生了一个致命错误"));
            //记录一般信息
            log.Info("info");
            //记录调试信息
            log.Debug("debug");
            //记录警告信息
            log.Warn("warn");
            Console.WriteLine("日志记录完毕。");
            Console.Read();
        }
    }
下面是便是强大的LogHelper类,如果用于web,注意记得在global.asax里面调用LogHelper里的init初始化方法。
view plaincopy to clipboardprint?
01.using System;  
02.using System.Collections.Generic;  
03.using System.Text;  
04.using log4net;  
05.[assembly: log4net.Config.XmlConfigurator(Watch = true)]  
06.namespace The9web.Common  
07.{  
08.    public class LogHelper  
09.    {  
10.        /// <summary>  
11.        /// 静态类  
12.        /// </summary>  
13.        private LogHelper() { }  
14.        private const string LOG_REPOSITORY = "Default"; // this should likely be set in the web config.  
15.        private static ILog m_log;  
16.        /// <summary>  
17.        /// 初始化日志系统  
18.        /// 在系统运行开始初始化  
19.        /// Global.asax Application_Start内  
20.        /// </summary>  
21.        public static void Init()  
22.        {  
23.            log4net.Config.XmlConfigurator.Configure();  
24.        }  
25.        /// <summary>  
26.        /// 写入日志  
27.        /// </summary>  
28.        /// <param name="message">日志信息</param>  
29.        /// <param name="messageType">日志类型</param>  
30.        public static void Write(string message, LogMessageType messageType)  
31.        {  
32.            DoLog(message, messageType, null, Type.GetType("System.Object"));  
33.        }  
34.        /// <summary>  
35.        /// 写入日志  
36.        /// </summary>  
37.        /// <param name="message">日志信息</param>  
38.        /// <param name="messageType">日志类型</param>  
39.        /// <param name="type"></param>  
40.        public static void Write(string message, LogMessageType messageType, Type type)  
41.        {  
42.            DoLog(message, messageType, null, type);  
43.        }  
44.        /// <summary>  
45.        /// 写入日志  
46.        /// </summary>  
47.        /// <param name="message">日志信息</param>  
48.        /// <param name="messageType">日志类型</param>  
49.        /// <param name="ex">异常</param>  
50.        public static void Write(string message, LogMessageType messageType, Exception ex)  
51.        {  
52.            DoLog(message, messageType, ex, Type.GetType("System.Object"));  
53.        }  
54.        /// <summary>  
55.        /// 写入日志  
56.        /// </summary>  
57.        /// <param name="message">日志信息</param>  
58.        /// <param name="messageType">日志类型</param>  
59.        /// <param name="ex">异常</param>  
60.        /// <param name="type"></param>  
61.        public static void Write(string message, LogMessageType messageType, Exception ex,  
62.                                 Type type)  
63.        {  
64.            DoLog(message, messageType, ex, type);  
65.        }  
66.        /// <summary>  
67.        /// 断言  
68.        /// </summary>  
69.        /// <param name="condition">条件</param>  
70.        /// <param name="message">日志信息</param>  
71.        public static void Assert(bool condition, string message)  
72.        {  
73.            Assert(condition, message, Type.GetType("System.Object"));  
74.        }  
75.        /// <summary>  
76.        /// 断言  
77.        /// </summary>  
78.        /// <param name="condition">条件</param>  
79.        /// <param name="message">日志信息</param>  
80.        /// <param name="type">日志类型</param>  
81.        public static void Assert(bool condition, string message, Type type)  
82.        {  
83.            if (condition == false)  
84.                Write(message, LogMessageType.Info);  
85.        }  
86.        /// <summary>  
87.        /// 保存日志  
88.        /// </summary>  
89.        /// <param name="message">日志信息</param>  
90.        /// <param name="messageType">日志类型</param>  
91.        /// <param name="ex">异常</param>  
92.        /// <param name="type">日志类型</param>  
93.        private static void DoLog(string message, LogMessageType messageType, Exception ex,  
94.                                  Type type)  
95.        {  
96.            m_log = LogManager.GetLogger(type);  
97.            switch (messageType)  
98.            {  
99.                case LogMessageType.Debug:  
100.                    LogHelper.m_log.Debug(message, ex);  
101.                    break;  
102.                case LogMessageType.Info:  
103.                    LogHelper.m_log.Info(message, ex);  
104.                    break;  
105.                case LogMessageType.Warn:  
106.                    LogHelper.m_log.Warn(message, ex);  
107.                    break;  
108.                case LogMessageType.Error:  
109.                    LogHelper.m_log.Error(message, ex);  
110.                    break;  
111.                case LogMessageType.Fatal:  
112.                    LogHelper.m_log.Fatal(message, ex);  
113.                    break;  
114.            }  
115.        }  
116.        /// <summary>  
117.        /// 日志类型  
118.        /// </summary>  
119.        public enum LogMessageType  
120.        {  
121.            /// <summary>  
122.            /// 调试  
123.            /// </summary>  
124.            Debug,  
125.            /// <summary>  
126.            /// 信息  
127.            /// </summary>  
128.            Info,  
129.            /// <summary>  
130.            /// 警告  
131.            /// </summary>  
132.            Warn,  
133.            /// <summary>  
134.            /// 错误  
135.            /// </summary>  
136.            Error,  
137.            /// <summary>  
138.            /// 致命错误  
139.            /// </summary>  
140.            Fatal  
141.        }  
142.    }  
143.} 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kevonz/archive/2010/01/09/5159429.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约