在C#代码中应用Log4Net 中配置文件的解释

在C#代码中应用Log4Net 中配置文件的解释

大家好,又见面了,我是全栈君。

一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件。

复制代码
复制代码
<log4net>
  <!-- 错误日志类-->
  <logger name="logerror">
    <level value="ALL" />
    <appender-ref ref="ErrorAppender" />
  </logger>
  <!-- 信息日志类 -->
  <logger name="loginfo">
    <level value="ALL" />
    <appender-ref ref="InfoAppender" />
  </logger>
  <!-- 错误日志附加介质-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="Log\\LogError\\" />
    <param name="AppendToFile" value="true" />
    <param name="MaxSizeRollBackups" value="100" />
    <param name="MaxFileSize" value="10240" />
    <param name="StaticLogFileName" value="false" />
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
  <!-- 信息日志附加介质-->
  <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="yyyyMMdd&quot;.htm&quot;" />
    <param name="RollingStyle" value="Date" />
    <!-- 信息日志布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
</log4net>
复制代码
复制代码

先不分析上面这段配置信息是什么意思。我们先来回想一下我们的日志类通常用来做什么,假设我们有一个库存管理系统,分为两大模块,一个是出库,一个是入库。我们可能想要出库的相关信息保存在某一个文件夹里面,入库的信息存在另一个文件夹里面。这样,我们通常的做法是用在日志类中不同的路径将日志写到不同位置,但是如果我们不单单想要写到日志文件中,而且想要将这些日志文件插入数据库呢?一般来讲,我们会再建立一些方法,来写到数据库。另外,正常日志信息和错误日志信息的布局,我们可能想要根据日志类型的不同,改变信息的布局,比如错误日志里面有异常信息的记录,正常日志里面就没有异常的记录。

      总结地说,我们的日志类的需求通常就是:1、能够按要求将日志写到不同的介质上(文件、数据库、邮件等);2、能够根据日志类型的不同,写到不同的位置;3、能根据信息的类型,改变日志的布局。

      不得不说,想要写好一个日志记录类还是挺不容易的的,看是简单的需求要做好,也是需要下大工夫的。而这些在Log4Net中,只需要经过一些配置,就可以完成。如果你懒得写配置信息,也可以直接将上面的配置信息拷过去用。

配置文件中节点的解释

logger是负责日志的记录者,假设我们需要记录一些正常的运行时日志和出现异常时的错误日志,那么我们可以通过在配置文件当中添加两个Logger实现。 
appender提供记录的介质,前面谈到,我们可能要同时将数据记录到文件和数据库中,我们可以简单地通过编写appender实现,而且Log4Net当中已经默认提供了一些常用的appender,我们可以简单地修改一些配置文件就实现同时向数据库和同时向文件中写入的功能。

layout负责把记入的内容格式化。其实就是决定日志文件要长什么样子。

Logger节点的解释

错误日志类为例进行解释

<!-- 错误日志类-->
  <logger name="logerror">              <!-- 日志类的名字-->
    <level value="ALL" />               <!-- 定义记录的日志级别-->
    <appender-ref ref="ErrorAppender" /><!-- 记录到什么介质中-->
  </logger>

level定义记录的日志级别,就是说,你要记录哪个级别以上的日志,级别由高往低依次是:

None
Fatal
ERROR
WARN
DEBUG
INFO
ALL

级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处理非常灵活

appender-ref定义日志要写入到什么介质中中。上面例子中就是写入到ErrorAppender这个介质中,在ErrorAppender节点我们可以定义跟日志有关的要写入到什么地方,日志文件的格式是什么等信息。

appender节点的解释

ErrorAppender为例

复制代码
复制代码
<!-- 错误日志附加介质-->
  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">  <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
    <param name="File" value="Log\\LogError\\" /> <!-- 输出到什么目录-->
    <param name="AppendToFile" value="true" /><!-- 是否覆写到文件中-->
    <param name="MaxSizeRollBackups" value="100" /><!-- 备份文件的个数-->
    <param name="MaxFileSize" value="10MB" /><!-- 单个日志文件最大的大小-->
    <param name="StaticLogFileName" value="false" /><!-- 是否使用静态文件名-->
    <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" /><!-- 日志文件名-->
    <param name="RollingStyle" value="Date" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
    </layout>
  </appender>
复制代码
复制代码

appender节点中,type=RollingFileAppender 的意思是将日志以回滚文件的形式写到文件中。

File节点中规定了文件要写入到什么目录中,上例中的“Log\\LogError\\”代表写入到“程序输入目录(Debug目录)\Log\LogError\”文件夹中。

AppendToFile节点规定了是否覆写到文件中。假设我们已经有了一个20131028.htm日志文件,当为true的时候,日志文件会附加到这个文件上。为false的时候,Log4Net会先将原来的日志文件备份,生成一个新的日志文件(见下图)。

image

MaxFileSize 最大的文件大小。我们可以使用”KB”, “MB” 或 “GB”为 MaxFileSize 作为后缀限定大小。默认的文件大小是10MB。

RollingStyle是文件创建的方式。上例中市设置为以Date方式创建新文件。

DatePattern 日期格式,当我们设置了RollingStyle 为Date方式后,Log4Net会自动使用DatePattern 中的日期格式来创建新的日志文件。

MaxSizeRollBackups这个属性用来设置,当日志文件达到MaxFileSize大小,就自动创建备份文件。备份文件的多少由MaxSizeRollBackups决定。比如说,我们是以日期格式作为日志文件名的,假设今天是2013-10-28,那么今天创建的日志文件名就是20131028.htm,当这个文件中要超过MaxFileSize的时候,Log4Net就自动将老的20131028.htm改名为20131028.htm.1,并创建一个新的20131028.htm文件。

StaticLogFileName 是否采用静态文件名。因为我们这个例子是采用以日期作为文件名,每天的日志文件的名字都是动态的,所以上例中为false。如果采用静态文件名,那么日志文件的名字就是唯一确定的。可以参考下面的配置文件进行设置。下面的配置文件中就是采用静态文件名,生成的日志文件名都是log.txt。

复制代码
复制代码
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
复制代码
复制代码

 layout就是布局。Layout中的ConversionPattern就是日志文件的格式,一些符号的介绍附加在下面。由于格式化的方式比较多,除了下面介绍的,大家也可以自己看看官方文档

%m[%message] 输出的日志消息
%n 换行
%d[%datetime] 输出当前语句运行的时刻
%r 输出程序从运行到执行到当前语句时消耗的毫秒数
%d 当前语句所在的线程ID
%p 日志的当前优先级别
%c 当前日志对象的名称
%L 输出语句所在的行号
%F 输出语句所在的文件名
%-数字 表示该项的最小长度,如果不够,则用空格填充
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4866078.html
,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107912.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月12日 上午8:00
下一篇 2022年3月12日 上午8:00


相关推荐

  • 动态添加流式布局

    动态添加流式布局自定义流式布局 之前的一篇文章写过 这里就不阐述了 http blog csdn net article details 随后封装一个方法工具类 GradientDraw 代替 shape StateListDra 替换 selector 设置 publicclassD GradientDraw

    2026年3月16日
    2
  • vscode新建html文件并快速生成标准的html代码_vscode怎么开始写代码

    vscode新建html文件并快速生成标准的html代码_vscode怎么开始写代码在vscode里新建html文件,总是要一行一行的写标准的html代码;而DW新建html文件,都会自动生成标准的html代码;所以在使用vscode是总觉得很麻烦,  各种百度终于找到了使用的方法(很好用的一个快捷键):步骤:一、先输入一个!      二、点击tab键      三、自动生成标准的html代码(见图)       …

    2022年8月21日
    13
  • C语言中的选择排序

    C语言中的选择排序文章目录前言一、选择排序1.计算素组元素个数2.选择排序基本逻辑(例子是从大到小排列)3.具体实现1.外层循环:决定大回合个数每个大回合决出一个席位2.内层循环:决定小回合个数每个小回合进行1V1大战实力强的为擂主直至最后一位挑战者3.两个元素值的交换总结前言在C语言中用来解决排序问题的常见方法有选择排序和冒泡排序两种一、选择排序先上代码:1.计算素组元素个数通过sizeof()计算数组全体元素占空间的大小再去除以一个元素占空间的大小即可得到元素个数。2.选择排序基本

    2022年6月25日
    24
  • AI助手“元宝”上线!用户可直接在微信上与其聊天

    AI助手“元宝”上线!用户可直接在微信上与其聊天

    2026年3月13日
    1
  • python flask debug_pycharm配置debug

    python flask debug_pycharm配置debugflask项目如果在开发的时候不打开Debug模式的话,我们想要看项目中的报错信息就只能去控制台查看,会比较麻烦,而且如果不开启debug模式,我们每一次调整代码都需要将服务器重新启动,是非常麻烦的一件事,所以我们最好是将debug模式打开但是我在pycharm中使用代码开启debug模式总是打不开。使用代码打开debug模式的教程可以参考孟船长Flask第五篇—-设置debug模式的这…

    2022年8月25日
    12
  • 协方差矩阵的计算及意义「建议收藏」

    协方差矩阵的计算及意义「建议收藏」声明:博文转自https://blog.csdn.net/mr_hhh/article/details/78490576一、首先看一个比较简洁明了的协方差计算介绍:1.协方差定义X、Y是两个随机变量,X、Y的协方差cov(X,Y)定义为:其中,2.协方差矩阵定义矩阵中的数据按行排列与按列排列求出的协方差矩阵是不同的,这里默认数据是按行排列。即每一行是一个obs…

    2022年6月28日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号