log4net按照日志等级生成相应的日志文件(多文件配置)

log4是日常开发中使用比较多的日志记录工具,先放一段关于log4net Loggers的基本说明:
Logger是直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。

Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。所有的Logger都从Root继承,Root本身也是一个Logger。

日志的等级,它们由高到底分别为:

OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL

高于等级设定值方法(如何设置参见“配置文件详解”)都能写入日志, Off 所有的写入方法都不写到日志里,ALL则相反。例如当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL,ERROR,WARN,INFO会被写入,因为他们等级高于INFO。

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

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

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

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

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

DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
下面演示根据每个日志等级生成对应的一个文件。

这是本篇实例生成的日志的结构:
log4net按照日志等级生成相应的日志文件(多文件配置)_第1张图片
每个文件下分别存放相应等级的日志,日志的文件名为当前日期,每天一个文件(可以自行配置):
log4net按照日志等级生成相应的日志文件(多文件配置)_第2张图片

1、配置文件:
路径和文件名为(项目根目录下):Config/log4net.config
建成文件后不要忘记在Vissual Studio中右键该文件 -> 属性 -> 如果较新则复制到输出目录,如下图:

log4net按照日志等级生成相应的日志文件(多文件配置)_第3张图片


<log4net>
  <root>
  root>
  <logger name="RollingLogFileAppender">
    <level value="ALL" />
    <appender-ref ref="RollingFileDebug" />
    <appender-ref ref="RollingFileInfo" />
    <appender-ref ref="RollingFileWarn" />
    <appender-ref ref="RollingFileError" />
    <appender-ref ref="RollingFileFatal" />
  logger>
  <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Debug/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd".log""/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="Debug" />
      <param name="LevelMax" value="Debug" />
    filter>
  appender>
  <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Info/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd".log""/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    filter>
  appender>
  <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Warn/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd".log""/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="WARN" />
      <param name="LevelMax" value="WARN" />
    filter>
  appender>
  <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Error/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd".log""/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
    filter>
  appender>
  <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log/Fatal/"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="10"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd".log""/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%date{HH:mm:ss fff}] %-5level - %message%newline" />
    layout>
    <lockingmodel type="log4net.appender.fileappender+minimallock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="FATAL" />
      <param name="LevelMax" value="FATAL" />
    filter>
  appender>

log4net>

2、引入配置文件

这行代码放在项目的 AssemblyInfo.cs 文件的任意行,也可以放在启动文件的头部

//使用配置文件Config/log4net.config,监视改变(改变配置文件不用重启程序即可生效)。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]

3、初始化Logger实例

这行代码放在你需要写日志的类中,与方法同级

public static readonly ILog Log = LogManager.GetLogger("RollingLogFileAppender");

4、写日志

Log.Fatal("这是Fatal级日志");
Log.Error("这是Error级日志");
Log.Warn("这是Warn级日志");
Log.Info("这是Info级日志");
Log.Debug("这是Debug级日志");

像这样子:
log4net按照日志等级生成相应的日志文件(多文件配置)_第4张图片

到此,log4net使用方法便结束了,如果想知道log4net.config文件中某个节点的意思和用法,可以直接搜索,已经有很多文档进行说明了。

你可能感兴趣的:(C#)