欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

log4net日志记录 轻松上手

程序员文章站 2024-03-13 12:32:15
...

log4net 简介

log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。

步骤一:通过Nuget安装log4net

在菜单栏中选择工具->Nuget 包管理器->管理解决方案的Nuget 包管理器,在浏览中的搜索框中输入log4net进行安装

log4net日志记录 轻松上手

步骤二:新建log4net.config配置文件

log4net日志记录 轻松上手

将以下的内容全部覆盖到新建的配置文件中

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="DEBUG" />
      <!--Info消息记录-->
      <appender-ref ref="InfoLogFileAppender"/>
      <!--Debug消息记录-->
      <appender-ref ref="DebugLogFileAppender"/>
      <!--Error消息记录-->
      <appender-ref ref="ErrorLogFileAppender"/>
    </root>

    <!--定义输出到文件中-->
    <appender name="InfoLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="RollingStyle" value="Composite"/>
      <file value="Logs\info\"/>
      <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/>
      <appendToFile value="true"/>
      <staticLogFileName value="false"/>
      <param name="MaximumFileSize" value="10MB"/>
      <param name="CountDirection" value="-1"/>
      <maxSizeRollBackups value="1000"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
        <param name="Footer" value="-------------------------------------------------------------- \r\n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>

    <!--定义输出到文件中-->
    <appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--创建新文件的方式,可选为Size(按文件大小),Date(按日期),Once(每启动一次创建一个文件),
      Composite(按日期及文件大小),默认为Composite-->
      <param name="RollingStyle" value="Composite"/>
      <!--Log文件路径,如果RollingStyle为Composite或Date,则这里设置为目录,文件名在DatePattern里设置,
      其他则这里要有文件名。已经扩展支持虚拟目录-->
      <file value="Logs\debug\"/>
      <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/>
      <!--当文件存在时,是否在原文件上追加内容。-->
      <appendToFile value="true"/>
      <!--为true时,RollingStyler的date值将无效。且需要在file里指定文件名,所有日志都会记录在这个文件里。-->
      <staticLogFileName value="false"/>
      <!--当RollingStyle为Composite或Size,这里设置最大文件大小(可以KB,MB,GB为单位,默认为字节)-->
      <param name="MaximumFileSize" value="10MB"/>
      <!--当文件超过MaximumFileSize的大小时,如果要创建新的文件来存储日志,会根据CountDirection的值来重命名文件。
      大于-1的值时,file里指定的文件名会依次加上.0,.1,.2递增。
      个人理解就是log文件正序,倒序的问题,-1为倒序(最新消息在log文件名称最小的文件中),大于-1为正序(最新消息在log文件名称最大的文件中)-->
      <param name="CountDirection" value="-1"/>
      <!--最大Log文件备份数-->
      <maxSizeRollBackups value="1000"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="记录时间:%date %n调试输出:%message %newline %n"/>
        <param name="Footer" value="[Footer]\r\n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>

    <!--定义输出到文件中-->
    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="RollingStyle" value="Composite"/>
      <file value="Logs\error\"/>
      <param name="DatePattern" value="yyyyMM&quot;\\&quot;yyyyMMdd&quot;.log&quot;"/>
      <appendToFile value="true"/>
      <staticLogFileName value="false"/>
      <param name="MaximumFileSize" value="1MB"/>
      <param name="CountDirection" value="-1"/>
      <maxSizeRollBackups value="1000"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
        <param name="Footer" value="-------------------------------------------------------------- \r\n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
    </appender>

  </log4net>
</configuration>

步骤三:新建LogHelper静态类

/*
 log4net默认关联的是应用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:log4net.Config.XmlConifguratorAttribute。

XmlConfiguratorAttribute有3个属性:

ConfigFile: 配置文件的名字,文件路径相对于应用程序目录

(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。

ConfigFileExtension: 配置文件的扩展名,文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。

Watch: 如果将Watch属性设置为true,就会监视配置文件。当配置文件发生变化的时候,就会重新加载。

如果ConfigFile和ConfigFileExtension都没有设置,则使用应用程序的配置文件App.config(Web.config)。

*/

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace WebApplication4
{
    public static class LogHelper
    {

        #region 方法 输出致命错误

        /// <summary>
        /// 输出致命错误
        /// </summary>
        /// <param name="t">发生错误的类的类型</param>
        /// <param name="ex">错误信息</param>
        public static void WriteErrorLog(Type t, Exception ex)
        {
            var log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        }

        #endregion

    }
}

恭喜你成功配置log4net

把下面示例代码添加到你的启动程序中,当执行后,可以在解决方案目录下找到Logs文件夹

      LogHelper.WriteErrorlLog(typeof(_Default), new Exception("模拟发生错误"));

log4net日志记录 轻松上手

后记:

在具体写日志时,一般可以这样理解日志等级:

FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。

ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。

WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。

INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。

DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。