zoukankan      html  css  js  c++  java
  • log4Net使用

    http://logging.apache.org/log4net/
    1.Log4net主要结构分析
      1.1 Logger:是应用程序与Log4net进行交互的主要模块,它也是log4net生成log的模块。Logger主要负责得到log信息,
                 得到log信息之后接下来的显示log则是在Layout模块中处理。

      2.2 Logger Level:Log级别
     
          OFF
          FATAL
          ERROR
          WARN
          INFO
          DEBUG
          ALL
     
      2.3 Appender: log目的地

          ConsoleAppender:将日志输出到控制台
          FileAppender:将日志输出到文件中
          RollingFileAppender:将日志以回滚文件的形式写到文件中
          EventLogAppender:将日志写到window event log
          AdoNetAppender:将日志写入数据库中

      2.4 Layout:log格式化器

          %m(message):输出的日志信息
          %n(new line):换行
          %d(datatime):输出当前语句运行的时刻
          %r(run time):输出程序从运行至执行当前语句时消耗的毫炒数
          %t(thread id):线程ID
          %p(priority):日志的当前优先级别,debug,info,warn...等
          %c(class)、%logger:当前日志对象的名称
          %file:输出语句所在的文件名
          %l(line):输出语句所在的行号
          %数字:表示该项的最小长度,如果不够,则用空格填充。

    2.在Winform项目中应用log4net框架

      2.1 使用Nuget安装log4net

      2.2 在AssemblyInfo文件中注册Log4net的配置文件

          //配置文件为app.config
          [assembly: log4net.Config.XmlConfigurator(Watch = true)]
          //配置文件为log4net.config
          [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

      2.3 配置app.config(设置文件属性"Copy to output directory"为"copy always")

      1 <?xml version="1.0"?>
      2 <configuration>
      3   <configSections>
      4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      5   </configSections>
      6 
      7   <log4net>
      8     <!--定义输出到文件中-->
      9     <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
     10       <!--定义文件存放位置-->
     11       <file value="D:/log4netfile.txt" />
     12       <appendToFile value="true" />
     13       <layout type="log4net.Layout.PatternLayout">
     14         <!--每条日志末尾的文字说明-->
     15         <footer value="by Paul" />
     16         <!--输出格式-->
     17         <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
     18         <conversionPattern value="记录时间:%d 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
     19       </layout>
     20     </appender>
     21 
     22     <!--定义以回滚方式输出到文件中(按照文件大小记录日志)-->
     23     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
     24       <!--定义文件存放位置-->
     25       <file value="D:/log4netfile.txt" />
     26       <appendToFile value="true" />
     27       <rollingStyle value="size"/>
     28       <!--最大的日志文件个数,生成的文件名会是log4netFile.txt.1,log4netFile.txt.2 ...如果记录的日志超过10个,会从第1 个文件开始覆盖-->
     29       <maxSizeRollBackups value="10"/>
     30       <!--每个日志文件最大100KB-->
     31       <maximumFileSize value="100KB"/>
     32       <staticLogFileName value="true" />
     33       <layout type="log4net.Layout.PatternLayout">
     34         <!--每条日志末尾的文字说明-->
     35         <footer value="by Paul" />
     36         <!--输出格式-->
     37         <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
     38         <conversionPattern value="记录时间:%d 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
     39       </layout>
     40     </appender>
     41 
     42     <!--定义以回滚方式输出到文件中(按照日期记录日志)-->
     43     <appender name="RollingFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
     44       <!--定义文件存放位置-->
     45       <file value="D:/log4netfile_DateFormat_log.txt" />
     46       <appendToFile value="true" />
     47       <rollingStyle value="Date"/>
     48       <datePattern value="yyyyMMdd"/>
     49       <layout type="log4net.Layout.PatternLayout">
     50         <!--每条日志末尾的文字说明-->
     51         <footer value="by Paul" />
     52         <!--输出格式-->
     53         <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
     54         <conversionPattern value="记录时间:%d 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
     55       </layout>
     56     </appender>
     57 
     58     <!--定义输出到控制台命令行中-->
     59     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
     60       <layout type="log4net.Layout.PatternLayout">
     61         <conversionPattern value="%date [%thread] %-5level %logger - %file - %message%newline" />
     62       </layout>
     63     </appender>
     64 
     65     <!--定义输出到windows事件中-->
     66     <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
     67       <layout type="log4net.Layout.PatternLayout">
     68         <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     69       </layout>
     70     </appender>
     71 
     72     <!--定义输出到Sql server数据库中-->
     73     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
     74       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     75       <connectionString value="Data Source=192.168.0.57;Initial Catalog=IPP_PCL_DEV;User ID=IPPCLDev;Password=smlSI123"/>
     76       <commandText value="INSERT INTO Log (LogLevel,Logger,Message,Exception,LogDate) VALUES (@log_level,@logger,@message,@exception,@log_date)" />
     77       <bufferSize value="1" />
     78 
     79       <parameter>
     80         <parameterName value="@log_date" />
     81         <dbType value="DateTime" />
     82         <layout type="log4net.Layout.RawTimeStampLayout"/>
     83       </parameter>
     84 
     85       <parameter>
     86         <parameterName value="@log_level" />
     87         <dbType value="String" />
     88         <size value="50" />
     89         <layout type="log4net.Layout.PatternLayout">
     90           <conversionPattern value="%level" />
     91         </layout>
     92       </parameter>
     93       
     94       <parameter>
     95         <parameterName value="@logger" />
     96         <dbType value="String" />
     97         <size value="255" />
     98         <layout type="log4net.Layout.PatternLayout">
     99           <conversionPattern value="%logger" />
    100         </layout>
    101       </parameter>
    102 
    103       <parameter>
    104         <parameterName value="@message" />
    105         <dbType value="String" />
    106         <size value="200" />
    107         <layout type="log4net.Layout.PatternLayout">
    108           <conversionPattern value="%m" />
    109         </layout>
    110       </parameter>
    111 
    112       <parameter>
    113         <parameterName value="@exception"/>
    114         <dbType value="String"/>
    115         <size value="2000"/>
    116         <layout type="log4net.Layout.ExceptionLayout"/>
    117       </parameter>
    118 
    119 
    120     </appender>
    121 
    122     <root>
    123       <level value="DEBUG" />
    124       <appender-ref ref="ConsoleAppender"/>
    125       <appender-ref ref="AdoNetAppender"/>
    126     </root>
    127   </log4net>
    128 </configuration>

      2.4 编写Log

     1 class Program
     2 {
     3 
     4     [STAThread]
     5     static void Main()                 
     6     {
     7         ILog log = LogManager.GetLogger("Program333");
     8 
     9         log.Error("this is a log information",new ArgumentNullException());
    10 
    11         log.Warn("this is a log information");
    12 
    13         log.Info("this is a log information");
    14 
    15         log.Debug("this is a log information");
    16 
    17         Console.ReadKey();
    18     }
    19 }

     2.5 在运行时动态修改log的配置

     public static void SetLogPath(string filePath)
     {
         var appender = LogManager.GetRepository().GetAppenders().FirstOrDefault(item => item.Name.Equals("DownloadAndUploadLogAppender")) as FileAppender;
    
         if (appender == null)
         {
             throw new NotSupportedException("not find DownloadAndUploadLogAppender");
         }
    
         appender.File = filePath;
    
         appender.ActivateOptions();
     }
  • 相关阅读:
    pycharm的background task一直更新index,速度慢的解决方法
    第一章 图像处理基础(直方图、高斯滤波、直方图均衡化)
    下载及配置Python+openCV
    封装axios的接口请求数据方法
    better-scroll封装上拉刷新,下拉加载更多功能
    封装js插件(loading)
    商品列表跳转详情页(项目过程思路)
    setInterval踩坑记
    Vue组件封装(以封装一个button组件为例)
    组件传值的方式
  • 原文地址:https://www.cnblogs.com/JustYong/p/4335405.html
Copyright © 2011-2022 走看看