log4net
一、安装
右击项目,Manage Nuget Packages,搜索并安装log4net类库文件:
二、配置
2.1 log4net.config文件
项目右击,添加新文件,Application Configuration File配置文件,命名为log4net.config,内容共分为两部分 configSections 和 log4net,参考代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--file可以指定具体的路径 eg: D:\\Share\\log\\MesClient.log。不指定的话log被生成在项目的bin/Debug 或者 bin/Release目录下-->
<file value="log/MesClient.log" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<rollingStyle value="Size" />
<!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
<maxSizeRollBackups value="20" />
<!--每个文件的大小,超出大小后在所有文件名后自动增加正整数重新命名。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
<maximumFileSize value="10MB" />
<!--是否只写到一个文件中-->
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<!--指定log的格式 : %date记录时间 %-5level日志级别 %logger记录类 %message消息内容 %newline换行-->
<conversionPattern value="[%date] - %-5level - %logger [%M] -- %message%newline" />
</layout>
<param name="Encoding" value="utf-8" />
</appender>
<root>
<level value="DEBUG" />
<!--指定将此级别及以上的log打印到log文件中-->
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
更加详细全面的配置说明请参考:非常完善的Log4net详细说明 - CSDN博客 https://blog.csdn.net/binnygoal/article/details/79557746
2.2 AssemblyInfo.cs文件
在Properties下的AssemblyInfo.cs文件中添加一行代码:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
效果如图:
三、应用
文件中首先引用 using log4net;
在类中实例化logger对象,不同的类中要分别实例化logger对象,所有的logger会输出到同一个日志文件中。
public ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
日志的类型和等级包括:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
ERROR(一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
DEBUG (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。
用法一、直接输出信息时:
logger.Info("-------------------- Machine Server is starting --------------------");
用法二、输出异常信息时,写在try catch中:
catch (Exception e) { logger.ErrorFormat("Exception when GetServerStatus: IP:[{0}] message:{1}", m_IP, e.Message); }
另外,有无Format的区别是(拿Info和InfoFormat举例):
Info的重载方法只有两种,InfoFormat的重载方法有多种,因此InfoFormat的适用性更大一点。
比如以下四个入参的情况就只能使用InfoFormat:
logger.InfoFormat("Storage:[{0}] Status changed: [{1}]->[{2}]", StorageNo, Status.ToString(), value.ToString());
四、参考
C# 日志输出工具库—log4net 安装、配置及简单应用 https://www.cnblogs.com/oucsheep/p/9467932.html
C#教程之浅谈Log4net在项目中如何记录日志https://www.xin3721.com/ArticlecSharp/c13233.html(很全面)
C#使用log4net记录日志https://www.cnblogs.com/vichin/p/6022612.html