log4net 使用 详解

     以前做的项目都是自己写的一个简单的日志管理类,做一般的异常错误记录等使用,但是在管理方面还是不给力,后听说公司的java项目使用的是log4j来进行日志管理,是个开源的现成的日志管理框架,于是乎本着学习的心态google了下果然还真有.net的姐妹版本,花了点学习了下,后把以前做的几个项目都替换成该日志管理,感觉满不错至少比以前自己写的要好的太多,在这记录下log4net的使用,如能帮助到刚接触该框架的朋友,那更开心了。

      一、首先介绍下个人使用心得

                  1、使用简单,上手快:短短的花1个小时左右的时间候网上找点资料跟示例很快就能做个简单的配置进行日志输出,需要定制自己有特色的那另说了。一般都是直接
                                                         用现成的就ok。

                  2、输出日志能分级:程序部署后,可以根据需要修改配置文件输出不同级别的日志文件,能够让开发人员迅速的找到bug发生的位置极其原因。

                  3、日志管理方便: 通过简单的修改配置文件能达到,日志文件输出类型、大小、备份版本控制、日志文件数量控制等。

     二、log4net构架

                  log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局)。

    三、用个示例来解说log4net的使用

            1、 首先在系统配置添加该内容  如没有自己创建一个配置文件:

                 

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="ChinaBank.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <logger name="receive.Logging">
      <level value="ERROR"/>
      <appender-ref ref="receiveAppender" />
    </logger>
    <logger name="send.Logging">
      <level value="INFO"/>
      <appender-ref ref="sendAppender" />
    </logger>
    <logger name="appLog.Logging">
      <level value="INFO"/>
      <appender-ref ref="appLogAppender" />
    </logger>
    <appender name="receiveAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="Logs/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="接收yyyyMMdd.'txt'" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="记录时间:%d 内容:%m%n--------------------------------------------------%n" />
      </layout>
    </appender>
    <appender name="sendAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="Logs/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="compile" />
      <param name="DatePattern" value="发送yyyyMMdd.'txt'" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="记录时间:%d 内容:%m%n---------------------------------------------------%n" />
      </layout>
    </appender>
    <appender name="appLogAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="Logs/appLog.txt" />
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="记录时间:%d 内容:%m%n---------------------------------------------------%n" />
      </layout>
    </appender>
  </log4net>
  <!--这里为appSettings等其它节点信息-->
</configuration>

 2、cs窗体文件

 

      1)添加log4net.dll    (下载地址 http://logging.apache.org/log4net/

      2)在AseemblyInfo.cs 文件中添加

            [assembly: log4net.Config.DOMConfigurator(ConfigFile = "./log4netWinFormDemo.exe.config", ConfigFileExtension = "config", Watch = true)]

            //ConfigFile :为你的配置文件的config 的文件名称

 

            AseemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("log4netWinFormDemo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Lenovo")]
[assembly: AssemblyProduct("log4netWinFormDemo")]
[assembly: AssemblyCopyright("Copyright © Lenovo 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("221d5deb-f7ad-4deb-aba2-7699bb74f9ae")]

// 程序集的版本信息由下面四个值组成:
//
//      主版本
//      次版本 
//      内部版本号
//      修订号
//
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

//
[assembly: log4net.Config.DOMConfigurator(ConfigFile = "./log4netWinFormDemo.exe.config", ConfigFileExtension = "config", Watch = true)]


form 文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace log4netWinFormDemo
{
    public partial class Form1 : Form
    {
        log4net.ILog receive = log4net.LogManager.GetLogger("receive.Logging");
        log4net.ILog send = log4net.LogManager.GetLogger("send.Logging");
        log4net.ILog appLog = log4net.LogManager.GetLogger("appLog.Logging");
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
          
            receive.Info("test");
            receive.Debug("test2");
            receive.Error("test3");
            receive.Warn("test4") ;
            send.Info("t1");
            send.Info("t1");
            appLog.Info("te");
            appLog.Info("te");
        }
    }
} 

  这中简单的使用关键 还是在配置文件 刚开始看到  配置文件 不知 都那原始属性有什么用,怎么配置能达到自己 需要的日志

 按照上面配置文件 挨个介绍

   第一个节点

     <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="ChinaBank.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

 这主要是 添加 log4net 的xml引用

 

第二个节点  log4net 这个主要是 日子文件的主要配置

第三个节点

  <logger name="receive.Logging">                  
      <level value="ERROR"/>                             
      <appender-ref ref="receiveAppender" />
    </logger>

name :   这个是logger对象 在程序中 log4net.ILog receive = log4net.LogManager.GetLogger("receive.Logging");就可以获取到该对象

 level :   文件显示的级别 总共有以下级debug,info,warn,error,fatal  这个是程序中你输出的时候用的哪个方法输出 比如你用的info()这个方法输出他就是info级别的日志你用的

             error那输出就是error级别的日志 这是你级别设置为ERROR那 info()的日志都不会在日志文件中显示了。

appende-ref:附着器  这个是设置你这个log对象依赖哪个appende  下面就介绍appender怎么配置

第四个节点

  <appender name="receiveAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="Logs/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="接收yyyyMMdd.'txt'" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="记录时间:%d 内容:%m%n" />
      </layout>
    </appender>

     name:对应的是上面的 appende-ref  

     type: 回滚类型, 该类型有

     AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。

    AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。

    AspNetTraceAppender  能用asp.net中Trace的方式查看记录的日志。

    BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

    ConsoleAppender 将日志输出到应用程序控制台。

    EventLogAppender 将日志写到Windows Event Log。

    FileAppender 将日志输出到文件。

    ForwardingAppender 发送日志事件到子Appenders。

    LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。

    MemoryAppender 将日志存到内存缓冲区。

    NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

    OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。

    RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。

    RemotingAppender 通过.NET Remoting将日志写到远程接收端。

    RollingFileAppender 将日志以回滚文件的形式写到文件中。

    SmtpAppender 将日志写到邮件中。

    SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。

    TelnetAppender 客户端通过Telnet来接受日志事件。

    TraceAppender 将日志写到.NET trace 系统。

    UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

filtes 过滤器

    使用过滤器可以过滤掉Appender输出的内容。过滤器通常有以下几种:

    DenyAllFilter 阻止所有的日志事件被记录

    LevelMatchFilter 只有指定等级的日志事件才被记录

    LevelRangeFilter 日志等级在指定范围内的事件才被记录

   LoggerMatchFilter 与Logger名称匹配,才记录

   PropertyFilter 消息匹配指定的属性值时才被记录

   StringMathFilter 消息匹配指定的字符串才被记录   

Param有多个可以进行配置,常用的:

 

名称

描述

File

文件路径,如果RollingStyleCompositeDate,则这里设置为目录,文件名在DatePattern里设置,其他则这里要有文件名。已经扩展支持虚拟目录

RollingStyle

创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),Composite(按日期及文件大小),默认为Composite

DatePattern

RollingStyleCompositeDate这里设置文件名格式

StaticLogFileName

True/false,默认为truetrue时,RollingStylerdate值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里。

MaximumFileSize

RollingStyleCompositeSize这里设置最大文件大小(可以KBMBGB为单位,默认为字节)

CountDirection

默认值为-1。当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。大于-1的值时,file里指定的文件名会依次加上.0,.1,.2递增。当等于或小于-1时,创建依赖于MaxSizeRollBackups参数值,创建备份日志数。

MaxSizeRollBackups

备份日志数目,默认为0。在CountDirection为负数时有效。

Threshold

起始日志级别,取值为下面文章讨论的预定义日志级别。低于此级别的日志不会被记录。

AppendToFile

True/false,默认为true。当文件存在时,是否在原文件上追加内容。

 

  layout 输出格式

    %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
    %n(new line):换行
    %d(datetime):输出当前语句运行的时刻
    %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
    %t(thread id):当前语句所在的线程ID
    %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
    %c(class):当前日志对象的名称,例如:
    %f(file):输出语句所在的文件名。
    %l(line):输出语句所在的行号。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值