目录
1、背景介绍
2、项目记录日志的好处
3、实现日志记录
3.1、下载NuGet程序包引入相应dll文件
3.2、创建配置文件
3.3、修改配置文件的相关属性
3.4、通过特性(Attribute)来设置程序集(dll文件)的常规信息
3.5、创建 LoggerHelper进行日志记录
4、总结
1、背景介绍
公司项目要求所有的项目必须使用日志记录项目运行的相关数据信息以及错误日志记录。所以今天给大家介绍C#项目如何使用log4net进行日志记录。
2、项目记录日志的好处
- 比记忆可靠。比如,你当初为什么要做这个决定,或者一些关键的信息,如果你记录下来了,那么后面你只需要看一看日记就能回忆起来。
- 记录灵感。也许你在做这件工作时,忽然得到了一些灵感,这时,你写下来既不会让这个想法被遗忘,又不会干扰你当下正在做的事情。
- 帮你反思。写的过程就是思考的过程,也许你在写的时候会发现,刚刚做的事情完全有更好的解决方案。
- 方便后期复盘。当我们在做定期总结的时候,这个日记就是很好的一手资料
3、实现日志记录
3.1、下载NuGet程序包引入相应dll文件
首先打开vs,右击解决方案,点击管理解决方案的Nuget包管理
然后我们点击浏览,搜索log4net,进行安装
3.2、创建配置文件
然后我们需要新建一个名为log4net.config的配置文件,在配置文件中,加入以下代码
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!--错误日志-->
//
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="log\\LogError\\" />
<!--是否支持分割文件-->
<appendToFile value="true" />
<!--日志文件的记录形式-->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<!--当日志文件达到MaxFileSize大小,就自动创建备份文件。-->
<param name="MaxSizeRollBackups" value="100" />
<!--日志文件的布局格式-->
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n错误描述:%message%newline %n" />
</layout>
</appender>
<!--Info日志-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogInfo\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n日志描述:%message%newline %n" />
</layout>
</appender>
<!--监控日志-->
<appender name="MonitorAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\LogMonitor\\" />
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n跟踪描述:%message%newline %n" />
</layout>
</appender>
<!--Error日志-->
<logger name="LogError">
<level value="ERROR" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<!--Info日志-->
<logger name="LogInfo">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
<!--监控日志-->
<logger name="LogMonitor">
<level value="Monitor" />
<appender-ref ref="MonitorAppender" />
</logger>
</log4net>
3.3、修改配置文件的相关属性
更改配置文件的"复制到输出目录"这个属性为"始终复制"
3.4、通过特性(Attribute)来设置程序集(dll文件)的常规信息
接下来我们找到AssemblyInfo.cs这个类,在这个类中加入一行代码
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
3.5、创建 LoggerHelper进行日志记录
然后在我们项目文件下新建一个名为LoggerHelper的类,代码如下
public class LoggerHelper
{
private static readonly log4net.ILog LogInfo = log4net.LogManager.GetLogger("LogInfo");
private static readonly log4net.ILog LogError = log4net.LogManager.GetLogger("LogError");
private static readonly log4net.ILog LogMonitor = log4net.LogManager.GetLogger("LogMonitor");
/// <summary>
/// 记录Error日志
/// </summary>
/// <param name="errorMsg"></param>
/// <param name="ex"></param>
public static void Error(string errorMsg, Exception ex = null)
{
if (ex != null)
{
LogError.Error(errorMsg, ex);
}
else
{
LogError.Error(errorMsg);
}
}
/// <summary>
/// 记录Info日志
/// </summary>
/// <param name="msg"></param>
/// <param name="ex"></param>
public static void Info(string msg, Exception ex = null)
{
if (ex != null)
{
LogInfo.Info(msg, ex);
}
else
{
LogInfo.Info(msg);
}
}
/// <summary>
/// 记录Monitor日志
/// </summary>
/// <param name="msg"></param>
public static void Monitor(string msg)
{
LogMonitor.Info(msg);
}
}
接下来我们直接在需要打日志的地方调用LoggerHelper类中的方法就可以了
4、总结
项目中的日志记录了系统运行时发生的各种事件和错误信息,对于排查故障和定位问题非常有帮助。例如,在系统出现异常或崩溃时,开发人员可以通过查看日志找到相关的错误信息,进而定位问题的根本原因。日志中会记录系统的运行流程、函数调用栈、异常堆栈等关键信息,这些都是快速定位问题所必需的。