zoukankan      html  css  js  c++  java
  • log4net的使用

    1.引言
           日志对于应用程序来说,其重要性不言无喻,在编码时,可以帮助开发人员调试程序.在应用发布以后,可以跟踪应用程序的运行情况,必要时找出错误,或帮助以后审计.然而在应用程序中插入日志需要花费很多精力.一般来说大约4%的代码是专门用来记录日志的.所以即使对于一个不大的应用软件来说,也会插入上千条日志代码.在强调可重用组件开发的今天,除了自己的从头到尾开发一个可重用的日志操作类以外,对于.net应用程序,我们可以使用apache的log4net日志操作包(对于java,则有Log4j).官方网站:http://logging.apache.org/log4net/,最新版本为1.2.10.

    2.实例
    log4net可以通过程序来配置,当然通过配置文件来配置会更灵活.让我们来尝试一下在一个简单的应用MyApp中使用log4net.
    如下(记得先引用log4net程序集):
    using System;
    using log4net;
    using log4net.Config;
    namespace Com.Foo
    {
        
    public class MyApp
        
    {
            
    // Define a static logger variable so that it references the
            
    // Logger instance named "MyApp".
            private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));

            
    static void Main(string[] args)
            
    {
                
    // Set up a simple configuration that logs on the console.
                BasicConfigurator.Configure();
                log.Info(
    "Entering application.");
                Bar bar 
    = new Bar();
                bar.DoIt();
                log.Info(
    "Exiting application.");
                Console.Read();
            }

        }

        
    public class Bar
        
    {
            
    private static readonly ILog log = LogManager.GetLogger(typeof(Bar));

            
    public void DoIt()
            
    {
                log.Debug(
    "Did it again!");
            }

        }

    }
    运行结果如下:


    3.log4net简介
      3.1 Log4net的结构
    log4net有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

      3.1.1 Logger
    Logger是log4net的核心组件,也是应用程序需要交互的主要组件,它代表了Log4net的日志记录器,它能够对日志信息进行分类筛选,就是决定什么日志信息应用被输出,什么日志信息应该被忽略。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。
    Log4net框架定义了一个ILog接口,所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger,你必须首先实现这个接口。

    ILog接口的定义如下:
    public interface ILog
    {
      void Debug(object message);
      void Info(object message);
      void Warn(object message);
      void Error(object message);
      void Fatal(object message);

    //以上的每一个方法都有一个重载的方法,用来支持异常处理。
    //每一个重载方法都如下所示,有一个异常类型的附加参数。
      void Debug(object message, Exception ex);

      // ...

    //Boolean 属性用来检查Logger的日志级别
      bool isDebugEnabled;
      bool isInfoEnabled;
      //… 其他方法对应的Boolean属性

    }

      3.1.2 日志的级别
    log4net采用日志级别机制,简化了控制日志的输出步骤.
    Fatal():输出ERROR级别的日志信息.
    Error():输出ERROR级别的日志信息.
    Warn() :输出WARN级别的日志信息.
    Info() :输出INFO级别的日志信息.
    Debug():输出Debug级别的日志信息.

     3.2 Appender(附着器)
    Appender组件决定将日志信息输出到什么地方.比如控制台(Console),文件(File).

     3.3 Layout(布局)
    Layout组件用来决定日志的输出格式.

    4.使用配置文件来使用log4net
    对于开始的例子可以如下:

    using System;
    using System.IO;
    using log4net;
    using log4net.Config;
    namespace Com.Foo
    {
        
    public class MyApp
        
    {
            
    // Define a static logger variable so that it references the
            
    // Logger instance named "MyApp".
            private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));

            
    static void Main(string[] args)
            
    {
                
    // Set up a simple configuration that logs on the console.
                
    //BasicConfigurator.Configure();
                XmlConfigurator.Configure(new System.IO.FileInfo("ConsoleApplication1.exe.config"));

                log.Info(
    "Entering application.");
                Bar bar 
    = new Bar();
                bar.DoIt();
                log.Info(
    "Exiting application.");
                Console.Read();
            }

        }

        
    public class Bar
        
    {
            
    private static readonly ILog log = LogManager.GetLogger(typeof(Bar));

            
    public void DoIt()
            
    {
                log.Debug(
    "Did it again!");
            }

        }

    }

    相应的配置文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        
    <configSections>
            
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
        
    </configSections>
        
    <!--log4net配置-->
        
    <log4net>
            
    <!-- A1 is set to be a ConsoleAppender -->
            
    <appender name="A1" type="log4net.Appender.ConsoleAppender">

                
    <!-- A1 uses PatternLayout -->
                
    <layout type="log4net.Layout.PatternLayout">
                    
    <conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />
                
    </layout>
            
    </appender>

            
    <!-- Set root logger level to DEBUG and its only appender to A1 -->
            
    <root>
                
    <level value="DEBUG" />
                
    <appender-ref ref="A1" />
            
    </root>
        
    </log4net>
    </configuration>

    详细解释请参照:
    http://logging.apache.org/log4net/release/manual/configuration.html






  • 相关阅读:
    bzoj 1208: [HNOI2004]宠物收养所 (Treap)
    Bzoj 2431: [HAOI2009]逆序对数列 (DP)
    Bzoj 1055: [HAOI2008]玩具取名 (区间DP)
    线段树入门详解
    Bzoj 1087: [SCOI2005]互不侵犯King
    Bzoj 2748: [HAOI2012]音量调节 (DP)
    Bzoj 2752 高速公路 (期望,线段树)
    惨淡的模拟赛
    GSS4
    Bzoj 近期题目一句话题解
  • 原文地址:https://www.cnblogs.com/hustcat/p/1206650.html
Copyright © 2011-2022 走看看