zoukankan      html  css  js  c++  java
  • Log4net用法

    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         }
  • 相关阅读:
    Windows Phone 31 日谈——第18日:WebBrowser控件
    Windows Phone 31 日谈——第19日:推送通知
    使用bat文件启动服务
    绝代反向指标——丘吉尔 炒股第二天就崩盘
    插入数据库返回自增长序号
    大并发服务器开发
    在这个不相信爱情的时代里,巴菲特的故事似乎让我又相信爱情了
    mysql操作语句
    马云三历高考才进大学 第一次高考数学考1分
    俞敏洪的屌丝逆袭 大学考了三次进北大
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2510783.html
Copyright © 2011-2022 走看看