工作中点滴记录

永远保持学徒心态

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Log4net简介

Log4net 是Apache组织开发的著名的开源日志记录组件,可以以插件的形式应用在应用系统中。利用Log4net可以方便的将日志信息记录到文件,Windows事件日志和数据库中(MS SQL SERVER,ORACLE等)。并且我们还可以控制要记载的日志级别,可以记载的日志级别包括:

1、FATAL (致命错误)

2、ERROR(一般错误)

3、WARN(警告)

4、INFO(一般信息)

5、DEBUG(调试信息)

下载log4net

log4net有4中主要组件,分别是Logger(记录器),Repository(库),Appender(附着器),Layout(布局)

Logger 提供了多种方式来记录一个日志信息,可以在你的应用程序里创建多个Logger,每个实例化的Logger对象都被Log4net框架作为命名实体来维护。

Log4net框架定义了一个叫做LogManager的类,用来管理所有的Logger对象。它有一个静态的GetLogger()静态方法,用我们提供的名字参数来检索已经存在的logger对象,如果框架不存在该Logger对象,它也会为我们创建一个Logger对象。

级别

允许的方法

Boolean属性

优先级别

OFF

 

 

最高

FATAL

VoidFatal(object message)

Bool IsFatalEnabled

 

ERROR

Void Error(object message)

Bool IsErrorEnabled

 

WARN

Void Warn(object message)

Bool IsWarnEnabled

 

INFO

Void Info(object message)

Bool IsInfoEnabled

 

DEBUG

Void Debug(object message)

Bool IsDebugEnabled

 

ALL

 

 

最低

在Log4net框架里,通过设置配置文件,每个日志对象都被分配了一个日志优先级

例如,当创建一个日志对象,并且把它的级别设置为<level value="INFO"/> 框架会设置日志的每个Boolean属性,当你调用相应的日志方法时候,框架会检查相应的Boolean属性,决定该方法能不能被执行。

例如
1 Logger.Info("Hello World");
2 Logger.DEBUG("Hello World");
3 Logger.WARN("Hello World");

对于第一种方法,能够得到输出

对于第二种方法,不能得到输出,Debug的优先级低于Info

对于第三种,能够得到输出。

Appender

设定日志输出的目的地,负责向存储介质中追加日志,在配置文件中配置,通常有

AdoNetAppender

EventLogAppender

RollingFileAppender

Layout 日志消息记录的格式,在配置文件中进行配置

%m (message) 输出日志的消息

%n (new line) 换行

%d (datetime) 输出当前语句的运行时间

%r(run time) 输出程序从运行到执行再到当前语句的所耗费毫秒数

%t (thread id)当前语句的线程id

%p 日志的当前优先级别

%c 当前日志对象的名称

%L 输出语句所在的行号

%F 输出语句所在文件名

%-数字 表示该项的最小长度。

使用步骤:

1,项目中添加Log4net.dll引用

2,在web.config中进行配置:

Web.config
 1 <configSections>
 2     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 3   </configSections>
 4   <log4net>
 5     <!--  <root>
 6       <level value="ALL"/>
 7       <appender-ref ref="rootFile"/>
 8     </root>-->
 9     <logger name="AppLogger1">
10       <level value="INFO"/>
11       <appender-ref ref="LogFileAppender"/>
12     </logger>
13     <logger name="AppLogger2">
14       <level value="DEBUG"/>
15       <appender-ref ref="rollingFile"/>
16     </logger>
17     <appender name="LogFileAppender" type="Log4net.Appender.FileAppender">
18       <param name="File" value="App.log"/>
19       <param name="AppendToFile" value="true"/>
20       <layout type="log4net.Layout.PatternLayout">
21         <param name="Header" value="--start--&#13;&#10;"/>
22         <param name="Footer" value="--end--&#13;&#10;"/>
23         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] %X(auth) - %m%n"/>
24       </layout>
25       <filter type="log4net.Filter.LevelRangeFilter">
26         <param name="LevelMin" value="DEBUG"/>
27         <param name="LevelMax" value="FATAL"/>
28       </filter>
29     </appender>
30     <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
31       <param name="File" type="" value="log/"/>
32       <param name="AppendToFile" value="true"/>
33       <param name="RollingStyle" value="Date"/>
34       <param name="DatePattern" value="yyyy-MM-dd"/>
35       <param name ="StaticLogFileName" value="false"/>
36       <layout type="log4net.Layout.PatternLayout,log4net">
37         <param name="ConversionPattern" value="%d [%t] %-5p %c  %L  %F - %m%n"/>
38         <param name="Header" value="--start--&#13;&#10;"/>
39         <param name="Footer" value="--end--&#13;&#10;"/>
40       </layout>
41     </appender>
42   </log4net>

Log4net下有root,logger,appender标签

root标签,所有的logger都从root继承,root本身也是一个logger,root的设置在所有的Logger中都起作用,当在root和Logger中重复设定相同 的appender时,同一日志信息将被记录两次。

logger标签,每个logger标签代表一个logger,appender-ref表示该logger产生的日志消息传递给哪个appender,一个logger可以把相同的消息传递给多个appender记录。

appender标签,每个appender表示一个日志的存储位置,name不能和type一样。

3、在Global.ascx中的Application_Start方法加入:

    void Application_Start(object sender, EventArgs e)
    {
        //在应用程序启动时运行的代码
        log4net.Config.XmlConfigurator.Configure();
    }

4、调用代码:

   log4net.ILog log = log4net.LogManager.GetLogger("AppLogger2");

   log.Error("Hello World");

以上面的配置,举个SQL SERVER例子:

结果集:

--start--
2012-05-20 21:06:31,406 [5] ERROR AppLogger2  0   - ExecuteNonQuery 要求已打开且可用的 Connection。连接的当前状态为已关闭。
2012-05-20 21:06:45,296 [6] ERROR AppLogger2  0   - ExecuteNonQuery 要求已打开且可用的 Connection。连接的当前状态为已关闭。
--end--

调用端
 1 log4net.ILog log = log4net.LogManager.GetLogger("AppLogger2");
 2         try
 3         {
 4             string connectionString = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
 5             using (SqlConnection con = new SqlConnection(connectionString))
 6             {
 7                 SqlCommand cmd = new SqlCommand("DELETE FROM Categories WHERE CategoryID= 10 ", con);
 8                 cmd.ExecuteNonQuery();
 9             }
10         }
11         catch (Exception ex)
12         {
13             log.Error(ex.Message);
14             return;
15         }
posted on 2012-05-20 20:35  梦里故乡  阅读(6601)  评论(0编辑  收藏  举报