• Log4net


    之前对于配置并没有结束, 中间插了一个demo进去, 能够更直观的看到日志是怎么使用的. 这一篇, 我加了一些自己的东西进去, 可以更直观的来理解这些配置内容.

    这里就继续介绍配置文件中的内容.

    1. <log4net> 标签

    <log4net debug="true"></log4net>

    支持的属性:

    debug 可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。
    update 可选,取值是Merge(合并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。
    threshold 可选,取值是repository(库)中注册的level,默认值是ALL。

    支持的元素:

    appender 0或多个
    logger 0或多个
    renderer 0或多个
    root 最多一个
    param 0或多个

    2. <root>标签

    <root>
      <level value="ALL" />
      <appender-ref ref="ErrorLogFileAppender" />
      <appender-ref ref="TraceLogFileAppender" />
    </root>

    根元素, 其他所有的logger都默认继承他, root没有属性

    支持的子元素:

    appender-ref 0个或多个,要引用的appender的名字。
    level

    最多一个。 只有在这个级别或之上的事件才会被记录。

    OFF / FATAL / ERROR / WARN / INFO / DEBUG  / ALL 

    param 0个或多个, 设置一些参数。

    3. <logger>标签

    从上一篇的例子中, 其实是找不到logger标签的, 如果只是简单的记录日志, 其实并不需要使用到这个标签

    支持的属性:

    name 必须的,logger的名称
    additivity 可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。

    支持的子元素:

    appender-ref 0个或多个,要引用的appender的名字。
    level 最多一个。 只有在这个级别或之上的事件才会被记录。
    param 0个或多个, 设置一些参数。

    4. <appender>标签

    <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="LogsTrace" />
      <appendToFile value="true" />
      <MaxSizeRollBackups value="20" />
      <RollingStyle value="Date" />
      <DatePattern value="yyyy-MM-dd'.txt'" />
      <StaticLogFileName value="false" />
      <!--<MaximumFileSize  value="10MB"/>-->
      <layout type="log4net.Layout.PatternLayout,log4net">
        <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
        <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
        <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="DEBUG" />
        <levelMax value="INFO" />
      </filter>
    </appender>

    定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。

    支持的属性:

    name 必须的,Appender对象的名称
    type 必须的,Appender对象的输出类型

    支持的子元素:

    appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。
    filter 0个或多个,定义此app使用的过滤器。
    layout 最多一个。定义appender使用的输出格式。
    param 0个或多个, 设置Appender类中对应的属性的值。

    实际上<appender>所能包含的子元素远不止上面4个。

    在我过去的项目中, 常用的也就两种, 一种是写入文件中, 另一种是写入数据库中. 对于发送到邮件中的, 暂时还没有使用过. 那就主要介绍下前面两种方式吧.

    4.1 写入文件中

    写入文件中, 各人习惯可能有些不一样, 当然也是与项目相关的. 有些人喜欢按照日期来存, 有些人喜欢放入一个文件中, 设置最大存储值来存. 都是可以的. 如果项目日志文件多, 可以分日期, 如果项目日志文件少, 那么分日期, 就不合算了, 可能会导致文件和日志一样多.

    1). 日期方式

    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--文件目录或者文件名-->
      <file value="LogsError" />
        <!--为true时, 日志文件只取file的名字; 为false时, 日志文件取名规则为 file+DatePattern-->
      <StaticLogFileName value="false" />
      <!--文件名格式-->
      <DatePattern value="yyyy-MM-dd'.txt'" />
      <!--记录日志的形式, Date/Size 两种, 此处表示按日期记录日志-->
      <RollingStyle value="Date" />
      <!--是否追加到日志中, 默认为true, 无需设置-->
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
        <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
        <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="ERROR" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    日期方式, 要注意的几个地方, 我在上面用背景色标注出来了.

    2). 文件大小限制方式

    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="LogsError.log" />
      <RollingStyle value="Size" />
      <!--文件夹下记录的日志文件个数, 需要与MaximumFileSize配合使用-->
      <MaxSizeRollBackups value="2" />
      <!--每个日志文件大小, 不能为小数, 如果这里限制100kb, 但是需要记录的内容有150kb, 会全部记录的-->
      <!--可用单位 : KB / MB / GB -->
      <MaximumFileSize  value="100KB"/>
      <StaticLogFileName value="true" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
        <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
        <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="ERROR" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    从上面的配置看到, 文件夹下能建的日志文件是可以限制的, 那么如果满了怎么办? log4net 不会再创建新文件了, 而是重写的方式去记录日志. 换句通俗的说法, 就是在这几个文件里面转圈圈.

    4.2 写入数据库中

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <root>
        <level value="ALL" />
        <appender-ref ref="ADONetAppender" />
      </root>
    
      <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
        <!--缓存条数, 一次性写入数据库, 调试时, 此处设置为1-->
        <bufferSize value="1" />
        <param name="ConnectionType"  value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
        <param name="ConnectionString"  value="server=localhost;user id=root;password=root;database=current;port=3306;CharSet=utf8;" />
        <commandText value="insert into ErrorLog(dtDate,sThread,sLevel,sLogger,sMessage,sException) values (@log_date, @thread, @log_level, @logger, @message, @exception);" />
    
        <parameter>
          <parameterName value="@log_date" />
          <dbType value="DateTime" />
          <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
          <parameterName value="@thread" />
          <dbType value="String" />
          <size value="100" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%t" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@log_level" />
          <dbType value="String" />
          <size value="200" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%p" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@logger" />
          <dbType value="String" />
          <size value="500" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@message" />
          <dbType value="String" />
          <size value="3000" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%m" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@exception" />
          <dbType value="String" />
          <size value="4000" />
          <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
      </appender>
    </log4net>

    附上建表sql

    CREATE TABLE `errorlog` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `dtDate` datetime DEFAULT NULL,
      `sThread` varchar(100) DEFAULT NULL,
      `sLevel` varchar(200) DEFAULT NULL,
      `sLogger` varchar(500) DEFAULT NULL,
      `sMessage` varchar(3000) DEFAULT NULL,
      `sException` varchar(4000) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='错误日志表'

    OK, 接下来可以直接看结果了:

    还是蛮好用的, 配置起来也很简单. 使用起来更简单.

    参考:

      log4net使用手册

  • 相关阅读:
    PHP获取当前服务器版本,Ip等详细信息
    Alipay 支付类
    php对接app支付宝支付出错Cannot redeclare Decrypt()
    Alipay支付宝支付 报错 invalid [default store dir]: /tmp/
    C# .net 高清压缩图片 合并图片方法
    csharp C#数字字符串排序orderby的问题解决
    tesseract 4.0 ocr图像识别利器,可识别文字。图片越高清越准确
    mysql update ...select的使用 & update 遇到 disable safe 的解决方法
    在Visual Studio 2013中安装Mysql for EntityFramework
    Mysql 中如何创建触发器
  • 原文地址:https://www.cnblogs.com/elvinle/p/6264327.html
Copyright © 2020-2023  润新知