log4net日志记录 轻松上手

版权声明:本文为【世纪缘】原创文章,未经允许不得转载。 本人唯一QQ:1011435094 https://blog.csdn.net/QingHeShiJiYuan/article/details/78557860

log4net 简介

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

步骤一:通过Nuget安装log4net

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

通过Nuget安装log4ne

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

这里写图片描述

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

<?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("模拟发生错误"));

这里写图片描述

后记:

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/QingHeShiJiYuan/article/details/78557860
今日推荐