• 整理下log4net日志


    今天整理了下log4net日志,记录一下。。。

    日志是一个系统排错的重要组成,有在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net、NLog、CommonLogging......

    说下Log4net,它是.net平台上的一个日志框架,我接触的时间也不长,但是看着各开源库都在用这个于是前段时间也尝试去了解了一下,然后在自己的练手项目上试试看。

    首先让我认识到Log4net强大的地方就是它的多目标输出,可以输出到控制台、文件、数据库、系统事件、Email等,几乎无所不能。然后它可以通过配置让日志系统实时生效,比如说在服务运行的过程中修改配置改变输出目标,改变日志等级等,均不用重启程序。但是Log4net也有一个让我比较头痛的地方就是感觉配置过于复杂,根本记不住,每次都必须去查阅资料。

    先说下Log4net的基本配置结构:

    <?xml version="1.0"?>
    <configuration>
    
      <configSections>
      <!--log4配置节-->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net> 
        
      
    
      </log4net>
    </configuration>

    基本都机构就是这样 ,configuration节点里面包含configSection、log4net,这两个节点需要放在最前面。

    接下来就是配置了☞<?xml version="1.0"?>

    <configuration>
    
      <configSections>
      <!--log4配置节-->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net> 
        <!--根配置--> 
        <root>

          <!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL -->

          <level value="ALL"/>

          <!--输出到调试日志: Debug.log-->
          <appender-ref ref="DebugAppender"/>
          <!--输出到信息日志: Info.log-->
          <appender-ref ref="InfoAppender"/>
           
            <!--假装这里有多种日志--> 


          <!--数据库日志-->
          <!--<appender-ref ref="SqlAppender"/>-->
        </root>
      </log4net>
    </configuration>

     在log4net节点中有root根节点(log4net节点下支持的子元素有:appender,logger,renderer,root,param ,其中root只能有一个,其他的0个或多个),root节点下有一个<level value="ALL"/>节点,它表示日志级别为ALL(ALL级别最低,可记录日志级别高于它的级别)

    <!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> 

    appender-ref节点都ref是要引用的appender的名字,下文中的appender name="DebugAppender"就是对于<appender-ref ref="DebugAppender"/>这个级别都输出日志的配置。

    接下来就是各级别的详细输出配置:

    <configuration>
    
      <configSections>
      <!--log4配置节-->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net> 
        <!--根配置--> 
        <root> 
    
          <!--日志级别:可选值: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> 
    
          <level value="ALL"/> 
    
          <!--输出到调试日志: Debug.log-->
          <appender-ref ref="DebugAppender"/> 
          <!--输出到信息日志: Info.log--> 
          <appender-ref ref="InfoAppender"/>
           
            <!--假装这里有多种日志--> 
    
    
          <!--数据库日志--> 
          <!--<appender-ref ref="SqlAppender"/>--> 
        </root>

         <!--Debug.log-->
         <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender,log4net">
           <!--过滤-->
          <filter type="log4net.Filter.LevelRangeFilter">
          <param name="LevelMin" value="DEBUG" />
          <param name="LevelMax" value="DEBUG" />
          </filter>
          <!--目录路径,可以是相对路径或绝对路径-->
          <param name="File" value="c:/log/manage/debug/"/>
          <!--文件名,按日期生成文件夹-->
          <param name="DatePattern" value="/yyyy-MM-dd/&quot;debug.log&quot;"/>
          <!--追加到文件-->
          <appendToFile value="true"/>
          <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
          <rollingStyle value="Composite"/>
          <!--写到一个文件-->
          <staticLogFileName value="false"/>
          <!--单个文件大小。单位:KB|MB|GB-->
          <maximumFileSize value="2MB"/>
          <!--最多保留的文件数,设为"-1"则不限-->
          <maxSizeRollBackups value="-1"/>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
          </layout>
         </appender>

      </log4net>
    </configuration>

    注意<appender></appender>节点都type,RollingFileAppender代表的是将日志以回滚文件的形式写到文件中,想这样类型很多,网上搜下就找得到,按照情况配置类型即可。

    然后配置过滤级别、文件地址、文件名、是否写入到一个文件中、文件大小、文件数。

    然后是日志格式,可以像这样自己定义一个格式:

    <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
    </layout>

    别急!!!还有一个数据库日志:

    <appender name="SqlAppender" type="log4net.Appender.AdoNetAppender">
    
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO"/>
        <param name="LevelMax" value="FATAL"/>
      </filter>
    
      <!--缓冲区大小,值为100表示输出日志达到100条时才一次写入数据库,1表示不缓存-->
      <bufferSize value="100" />
      <!--连接组件类型-->
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <!--连接字符串-->
      <connectionstring value="server=.sql2005;database=Log;uid=sa;pwd=123" />
      <!--SQL语句-->
      <commandText value="INSERT INTO SysLogs
        ([Date],[Thread],[Level],[Logger],[Message],[Exception])
         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="255" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@log_level" />
          <dbType value="String" />
          <size value="50" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@logger" />
          <dbType value="String" />
          <size value="255" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@message" />
          <dbType value="String" />
          <size value="4000" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
          </layout>
        </parameter>
        <parameter>
          <parameterName value="@exception" />
          <dbType value="String" />
          <size value="2000" />
          <layout type="log4net.Layout.ExceptionLayout" />
        </parameter>
    </appender>

    注意type是AdoNetAppender,然后下面配置过滤级别缓冲区、链接组件类型、数据库的连接字符串、SQL语句;

    SQL语句下面都parameter节点是获取日志中的信息给到SQL。

    
    
  • 相关阅读:
    Python 基础语法学习 1 -- Print
    Using CMD to create Android automation environment
    Java学习随笔之9:AWT编程
    Java学习随笔之8: 异常处理
    Android自动化测试2:Demo code
    Android自动化测试1:环境准备
    Java学习随笔之7:java 集合
    Java学习随笔之6:基本类库
    Java学习随笔之5: 面向对象(下)
    Java学习随笔之4:面向对象(上)
  • 原文地址:https://www.cnblogs.com/zousc/p/11152981.html
Copyright © 2020-2023  润新知