winform项目中使用log4net
最近在一个winform项目中用到了log4net记录日志,没有阅读官方的文档,只参考了网上一些博客,使用的时候IsErrorEnable、IsInfoEnable等等都为false,导致log4net不能写日志,google了一圈,找到了解决方法。顺便把整个过程也记录一下。
1 、安装log4net
VS环境,项目 - 管理Nuget程序包,在浏览框中输入 log4net - 回车 - 选择 log4net - 安装。
2、添加log4net.config
在工程目录下添加log4net.config文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
</root>
<logger name="Error">
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</logger>
<logger name="InfoLog">
<level value="ALL" />
<appender-ref ref="InfoAppender" />
</logger>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="Log/Error" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%n[%d] %c %n%m%n%n" />
<param name="Header" value="-----------BEGIN-----------" />
<param name="Footer" value="------------END------------" />
</layout>
</appender>
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="Log/Info" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyyMMdd" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%n[%d] %c %n%m%n%n" />
<param name="Header" value="-----------BEGIN-----------" />
<param name="Footer" value="------------END------------" />
</layout>
</appender>
</log4net>
</configuration>
各个参数的作用这里就不写了。设置log4net.config的属性,使VS自动把log4net.config的内容复制到.exe文件所在的目录,如下图所示:
3、 修改AssemblyInfo.cs
在工程 - Properties - AssemblyInfo.cs文件中新增如下一行代码:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
- 如下图所示:
4、新增一个LogHelper
新增一个LogHelper,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ToolUtils
{
public class LogHelper
{
public static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("InfoLog");
public static readonly log4net.ILog logError = log4net.LogManager.GetLogger("Error");
/// <summary>
/// 普通日志
/// </summary>
/// <param name="message">日志内容</param>
public static void Info(string message)
{
if (logInfo.IsInfoEnabled)
{
logInfo.Info(message);
}
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="message">错误日志</param>
public static void Error(string message)
{
if (logError.IsErrorEnabled)
{
logError.Error(message);
}
}
}
}
5、初始化log4net
在Program.cs文件中初始化log4net,否则在LogHelper中 的各种IsErrorEnable、IsInfoEnable都为false,导致log4net不写日志,初始化代码如下:
log4net.Config.XmlConfigurator.Configure();
6、使用
在需要写日志的地方调用LogHelper的相关函数写日志,如下:
LogHelper.Info("这是一条普通日志");
LogHelper.Error("这是一条错误日志");
生成的日志如下所示:
日志样式如下:
-----------BEGIN-----------
[2020-03-21 14:08:33,952] Error
这是一条错误日志
-----------BEGIN-----------
[2020-03-21 14:08:33,941] InfoLog
这是一条普通日志