log4Net使用 z

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();
 }
复制代码
原文地址:https://www.cnblogs.com/zeroone/p/4885713.html