Winform中使用Log4Net实现日志记录到文件并循环覆盖

发布时间 2023-11-06 10:03:28作者: 霸道流氓

场景

log4net

https://logging.apache.org/log4net/

The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime.

We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the .NET runtime.

Apachelog4net库是一种帮助程序员将日志语句输出到各种输出目标的工具。

log4net是优秀的Apache log4j的端口™ 框架到Microsoft®.NET运行时。保持了与原始log4j在精神上相似的框架,同时利用了.NET运行时中的新功能。

Winform程序中需要将运行过程的错误日志记录到文件中。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、项目中添加log4net依赖

使用nuget搜索log4net,然后进行安装

 

2、在项目目录下新建log4net.config作为配置文件

配置文件内容修改为

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!--根配置-->
  <root>
    <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
    <level value="ERROR"/>
    <appender-ref ref="ErrorLog" />
  </root>
  <!-- 错误 Error.log-->
  <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
    <!--目录路径,可以是相对路径或绝对路径-->
    <file value="log/log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="7" />
    <maximumFileSize value="5MB" />
    <staticLogFileName value="true" />
    <!--日志格式-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %message %n"/>
    </layout>
    <!--输出级别在ERROR和ERROR之间的日志-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
    </filter>
  </appender>

</log4net>

这里的配置文件只配置了ERROR级别的日志输出,并且配置的类型wi循环覆盖输出到文件。

这里的滚动覆盖的策略设置

<rollingStyle value="Size" />代表为按照文件大小进行滚动

<maximumFileSize value="5MB" />单个文件大小不超过5M,这里除了MB还可以使用KB或GB

<maxSizeRollBackups value="7" />超过5兆后最大文件个数为7个,如果设置为-1则个数不限制。

上面的配置文件可参考官网提供的配置的demo

https://logging.apache.org/log4net/release/config-examples.html

 

这里的滚动策略除了按照文件大小,还可以采用按照日期以及按照日期和文件混合的方式去设置,具体配置可参考官网说明。

https://logging.apache.org/log4net/release/sdk/html/T_log4net_Appender_RollingFileAppender.htm

 

3、配置文件新建成功之后,点击此配置文件的属性,选择始终复制

 

4、在项目目录下的AssemblyInfo.cs中添加如下配置

 

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

 

5、新建日志工具类

    class LogHelper
    {
        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
        public static void WriteErrorLog(string errorMessage)
        {
            if (logerror.IsErrorEnabled)
            {
                logerror.Error(errorMessage);
            }
        }
    }

6、日志输出使用

        private void button_Log4Net_Click(object sender, EventArgs e)
        {
            LogHelper.WriteErrorLog("霸道的程序猿");
        }

7、测试文件大小循环覆盖

将上面的日志输出error放在按钮点击事件中,然后设置为文件大小最大为1KB,文件个数最大为3个。

一直点击可以看到生成三个日志的备份文件

 

当超过三个时,再次记录日志会从第一个开始覆盖

 

根据更改时间可以验证

其它日志记录到数据库或者控制台等情况,参考官网说明。