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

这是本篇实例生成的日志的结构:
日志结构
每个文件下分别存放相应等级的日志,日志的文件名为当前日期,每天一个文件(可以自行配置):
这里写图片描述

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

这里写图片描述

<?xml version="1.0" encoding="utf-8" ?>
<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&quot;.log&quot;"/>
    <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&quot;.log&quot;"/>
    <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&quot;.log&quot;"/>
    <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&quot;.log&quot;"/>
    <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&quot;.log&quot;"/>
    <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使用方法便结束了,如果想知道log4net.config文件中某个节点的意思和用法,可以直接搜索,已经有很多文档进行说明了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现log4j每分钟生成一个日志文件,可以使用log4j的TimeBasedRollingPolicy。具体步骤如下: 1. 在log4j.properties文件中添加以下配置: ```properties log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/path/to/log/file/logfile.log log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/log/file/logfile.%d{yyyyMMdd-HHmm}.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %p %t %c - %m%n ``` 2. 解释配置: - log4j.appender.file:指定日志输出到文件。 - log4j.appender.file.File:指定日志输出文件的路径和名称。 - log4j.appender.file.RollingPolicy:指定日志文件滚动策略,即按时间滚动。 - log4j.appender.file.RollingPolicy.FileNamePattern:指定日志文件名的格式,%d{yyyyMMdd-HHmm}表示每分钟生成一个新文件。 - log4j.appender.file.layout:指定日志输出格式。 - log4j.appender.file.layout.ConversionPattern:指定日志输出内容的格式。 3. 编写Java代码,使用log4j进行日志记录。 ```java import org.apache.log4j.Logger; public class MyClass { private static final Logger logger = Logger.getLogger(MyClass.class); public static void main(String[] args) { logger.info("Hello, world!"); } } ``` 这样,每分钟都会生成一个新的日志文件日志内容按照指定格式输出到文件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值