场景
log4net
Apache log4net – Apache log4net: Home - Apache 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程序中需要将运行过程的错误日志记录到文件中。
注:
博客:
霸道流氓气质_C#,架构之路,SpringBoot
实现
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
Apache log4net – Apache log4net: Config Examples - Apache log4net
这里的滚动策略除了按照文件大小,还可以采用按照日期以及按照日期和文件混合的方式去设置,具体配置可参考官网说明。
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个。
一直点击可以看到生成三个日志的备份文件
当超过三个时,再次记录日志会从第一个开始覆盖
根据更改时间可以验证
其它日志记录到数据库或者控制台等情况,参考官网说明。