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






原文地址:https://www.cnblogs.com/hustcat/p/1206650.html