zoukankan      html  css  js  c++  java
  • log4net使用注意事项

    1配置Log4net

    Log4net的配置文件有几种使用方式,这里将配置log4net的部分独立出来,即关于log4net的配置独立成文件log4net.config

    1)写入Mysql

    log4net.config文件配置

    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
      </configSections>
    
      <log4net>
        <logger name="ErrorLog">
          <level value="Error"/>
          <appender-ref ref="ErrorAppender"/>
        </logger>
    
        <logger name="OperationLog">
          <level value="Info"/>
          <appender-ref ref="OperationAppender"/>
        </logger>
        
        <appender name="ErrorAppender" type="log4net.Appender.ADONetAppender">
          
          <bufferSize value="1"/>
          
          <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
          <connectionString value="Database=log;Data Source=192.168.107.13;User Id=root;Password=cnki2017;CharSet=utf8;port=3306"/>
          
          <commandText value="INSERT INTO errorlogs (`InsertTime`,`Level`,`Message`,`ExceptionMessage`) VALUES (@log_date, @log_level, @message, @exception)"/>
          <parameter>
            <parameterName value="@log_date"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.RawTimeStampLayout"/>
          </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="@exception"/>
            <dbType value="String"/>
            <size value="4000"/>
            <layout type="log4net.Layout.ExceptionLayout"/>
          </parameter>
          <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <size value="2000"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%message"/>
            </layout>
          </parameter>
    </appender>
      </log4net>
    </configuration>

    在控制台程序中使用:

    class Program
    {
            static void Main(string[] args)
            {
                try
                {
                    var path = string.Format("{0}{1}", System.AppDomain.CurrentDomain.BaseDirectory, "Log4net.config");
                    ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(path));
                    ILog log = log4net.LogManager.GetLogger("ErrorLog");
                    log.Error("wwwww", new Exception("测试抛出"));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                
            }
    }

    运行上面的代码,成功地将数据记录到数据库中。

    2)写入日志文件

    appender配置节说明

    file

    string

    日志文件存放位置,可以为绝对路径也可以为相对路径

    appendToFile

    boolean

    是否追加到已有的日志文件中

    rollingStyle

    Size/Date

    切分日志的模式。Size:按大小切分,Date按日期切分

    maxSizeRollBackups

    int

    当rollingStyle为Size模式时,指定备份日志文件的最大切分数量,如果超过指定值,日志将进行覆写。

    maximumFileSize

    int

    当rollingStyle为Size模式时,指定每个切分日志文件的大小

    datePattern

    string

    当rollingStyle为Date模式时,日志文件名称的一部分,可设置时间格式。

    staticLogFileName

    boolean

    指定是否为静态文件名。

    若指定为true,那么文件名以file 中定义的文件名为准。

    若为false,当rollingStyle为Date模式时,文件名为file 和datePattern共同构成的

    layout

    输出日志的样式

    其下的配置节conversionPattern

    控制着输出的样式

    lockingModel

    string

    最小锁定模型以允许多个进程可以写入同一个文件

    encoding

    string

    文件编码

     示例:

    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
      <configSections>
        <section name="log4net"                          type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
      </configSections>
    <log4net>
    <appender name="TxtLogRollingFileAppender"
    type="log4net.Appender.RollingFileAppender">
              <file value="log\RollingFile" />
              <appendToFile value="true" />
              <rollingStyle value="date" />
              <datePattern value="yyyy-MM-dd&quot;.log&quot;"/>
              <staticLogFileName value="false"/>
              <encoding value="utf-8" />
              <lockingModel type="log4net.Appender.FileAppender+MinimalLock"             />
              <layout type="log4net.Layout.PatternLayout">
                <param name="conversionPattern" value="时间:%date%newline                线程:[%thread]%newline日志类型:%-5level%newline内                    容:%message" />
                <param name="header" value="&#13;&#10;------------开始                    ---------------&#13;&#10;" />
                <param name="footer" value="&#13;&#10;-------------    结束                ------------&#13;&#10;" />
           </layout>
    </appender>
      </log4net>
    </configuration>

    Main函数中:

    ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"E:projgxz_myselfLog4NetTestLog4net.config"));
                    ILog log = log4net.LogManager.GetLogger("TxtLogRollingFileAppender");
                    log.Info("测试输出信息");
                    Console.Read();

    2遇到的问题

    1)数据库的访问。

    当访问的数据库不存在或表不存在或连接配置不正确时,并不会抛出异常。

    2)不会返回配置文件信息集合。

    ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(path));

    这行代码返回值是ICollection,然而并不会获得配置文件信息,返回的集合居然是空。

    3)配置文件路径不正确。

    当所指定的配置文件路径不正确时也不会抛出异常,这给调试增加了难度。

    4)配置日志类型与使用的方法不一致。

    将上面的配置节:

    <logger name="ErrorLog">

          <level value="Error"/>

          <appender-ref ref="ErrorAppender"/>

    </logger>

    改为下面这样,而其他代码不变,运行程序发现无法写入,但是系统不会抛出异常,也没有任何提示。

    <logger name="ErrorLog">

          <level value="Info"/>

          <appender-ref ref="ErrorAppender"/>

    </logger>

    5)回滚文件锁定模式

    如果如下这么配置,系统会抛异常,但是无法用try-catch捕获,但可在控制台查看到。

    <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />

    6)写文本文件的问题

    rollingStyle配置节的值为date,那么maxSizeRollBackups、maximumFileSize对日志文件没有任何影响。

  • 相关阅读:
    爬取淘宝商品信息
    eclipse 搭建Robotium环境--apk 环境搭建
    android studio2.0 搭建Robotium环境--有被测源代码的情况下
    mysql 特殊语句
    电脑浏览器访问文件夹
    mindmanager 15 停止工作
    yum被lock Existing lock /var/run/yum.pid: another copy is running as pid 1580. Another app is currently holding the yum lock; waiting for it to exi
    jenkins安装及部署
    ant+jmeter
    charles抓包及篡改
  • 原文地址:https://www.cnblogs.com/hdwgxz/p/8010758.html
Copyright © 2011-2022 走看看