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

原文地址:https://www.cnblogs.com/zwh1993/p/10750134.html