您的位置:首页 > 其它

Log4Net日志记录两种方式

2014-08-19 18:18 274 查看
本文转载:http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010

简介

log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。
log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。(f:百度百科)

原理

Log4net是基于.NET开发的一款记录日志开源组件。它通过一套XML配置的日志引擎,将日志分不同的等级,分别是:FATAL 、 ERROR、 WARN、 INFO 、 DEBUG、ALL(允许所有的日志请求)和OFF(拒绝所有的日志请求),缺省为DEBUG,前五个是不是很熟悉?可以看到和我们平常在调试应用程序的出错有点类似,在编译器中也会留下如错误、警告之类的提示信息,它们的错误级别在不断的降低。

log4net开源项目结构如图所示:

1         protected void btnShowTime_Click(object sender, EventArgs e)
2         {
3             log4net.ILog myLogger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
4             myLogger.Warn("这是一个警告日志");
5             myLogger.Info("单击了按钮");
6             myLogger.Debug("用Log4Net写入数据库日志");
7             myLogger.Error("这是一个错误日志");
8             myLogger.Fatal("这是一个致命的错误日志");
9             try
10             {
11                 ILog logger = LogManager.GetLogger("LogRecord");
12                 logger.Debug("用Log4Net写入数据库日志");
13                 int x = 5;
14                 int y = 0;
15                 Response.Write(x / y);
16             }
17             catch (Exception ex)
18             {
19                 myLogger.Error(ex);
20             }
21             finally
22             {
23                 lblShow.Text = DateTime.Now.ToLongTimeString()+":操作日志已记录完成";
24             }
25         }


结果



案例二:日志记入数据库

记入数据库的方式和记入文件的方式大同小异,主要区别在配置文件,其他步骤相同,记入数据库的配置文件log4net.config如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3   <configSections>
4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
5   </configSections>
6   <!--Log4net Begin-->
7   <log4net>
8     <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
9       <bufferSize value="1" />
10       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
11       <connectionString value="SERVER=127.0.0.1;DATABASE=TestDataBase;UID=sa;PWD=123456;Connect Timeout=15;" />
12       <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
13       <parameter>
14         <parameterName value="@log_date" />
15         <dbType value="DateTime" />
16         <layout type="log4net.Layout.RawTimeStampLayout" />
17       </parameter>
18       <parameter>
19         <parameterName value="@thread" />
20         <dbType value="String" />
21         <size value="100" />
22         <layout type="log4net.Layout.PatternLayout">
23           <conversionPattern value="%t" />
24         </layout>
25       </parameter>
26       <parameter>
27         <parameterName value="@log_level" />
28         <dbType value="String" />
29         <size value="200" />
30         <layout type="log4net.Layout.PatternLayout">
31           <conversionPattern value="%p" />
32         </layout>
33       </parameter>
34       <parameter>
35         <parameterName value="@logger" />
36         <dbType value="String" />
37         <size value="500" />
38         <layout type="log4net.Layout.PatternLayout">
39           <conversionPattern value="%logger" />
40         </layout>
41       </parameter>
42       <parameter>
43         <parameterName value="@message" />
44         <dbType value="String" />
45         <size value="3000" />
46         <layout type="log4net.Layout.PatternLayout">
47           <conversionPattern value="%m" />
48         </layout>
49       </parameter>
50       <parameter>
51         <parameterName value="@exception" />
52         <dbType value="String" />
53         <size value="4000" />
54         <layout type="log4net.Layout.ExceptionLayout" />
55       </parameter>
56     </appender>
57     <!-- setup the root category, add the appenders and set the default level -->
58     <root>
59       <level value="WARN"/>
60       <level value="INFO"/>
61       <level value="DEBUG"/>
62       <level value="FINE"/>
63       <appender-ref ref="ADONetAppender" />
64     </root>
65     <!-- specify the level for some specific categories -->
66     <logger name="iNotes">
67       <level value="WARN"/>
68       <level value="INFO"/>
69       <level value="DEBUG"/>
70       <level value="FINE"/>
71       <appender-ref ref="ADONetAppender"/>
72     </logger>
73     <logger name="StellaLogger">
74       <level value="ALL"/>
75       <appender-ref ref="AdoNetAppender" />
76     </logger>
77   </log4net>
78   <!--Log4net End-->
79 </configuration>


创建记录日志的数据表:

1     CREATE TABLE [dbo].[ErrorLog](
2
3     [nId] [bigint] IDENTITY(1,1) NOT NULL,
4
5     [dtDate] [datetime] NOT NULL,
6
7     [sThread] [varchar](100) NOT NULL,
8
9     [sLevel] [varchar](200) NOT NULL,
10
11     [sLogger] [varchar](500) NOT NULL,
12
13     [sMessage] [varchar](3000) NOT NULL,
14
15     [sException] [varchar](4000) NULL)


测试
采用上面的测试方法。

结果





结语

项目中经常用到的两种方式在这里做一下总结。其他方式,用到了再补上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: