Log4net 写文件日志与数据库日志

一、数据库日志表结构

[sql] view plaincopy
 
  1. CREATE TABLE [dbo].[WebLog_Msg](  
  2.     [LogID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [Date] [datetime] NOT NULL,  
  4.     [Thread] [nvarchar](255) NULL,  
  5.     [Level] [nvarchar](50) NULL,  
  6.     [Logger] [nvarchar](255) NULL,  
  7.     [Message] [nvarchar](2000) NULL,  
  8.     [Exception] [nvarchar](4000) NULL,  
  9.  CONSTRAINT [PK_WebLog_Msg] PRIMARY KEY CLUSTERED   
  10. (  
  11.     [LogID] ASC  
  12. ))  

 

二、测试类库LoggHelper

[csharp] view plaincopy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using log4net;  
  6.   
  7. namespace LogHelper  
  8. {  
  9.     public class LoggHelper  
  10.     {  
  11.         //static LoggHelper()  
  12.         //{  
  13.         //    log4net.Config.XmlConfigurator.Configure();  
  14.         //}  
  15.   
  16.         private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(LoggHelper));  
  17.         public static void LogInfo()  
  18.         {  
  19.             log.Info("log日志getretertretrree");  
  20.         }  
  21.         public static void LogWarn()  
  22.         {  
  23.             log.Warn("log警告WARNaaaaaaaaaad;");  
  24.         }  
  25.         public static void LogFatal()  
  26.         {  
  27.             log.Fatal("log警告WARNaaaaaaaaaad;");  
  28.         }  
  29.         public static void LogError()  
  30.         {  
  31.             log.Error("log错误sfsfsfsdfafasdfdsfadffafdsaffasf><><>2eewewjklsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaad;");  
  32.         }  
  33.     }  
  34. }  

三、控制台测试项目

[csharp] view plaincopy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using LogHelper;  
  6.   
  7. namespace TestLog4Net  
  8. {  
  9.     class Program  
  10.     {  
  11.           
  12.         static void Main(string[] args)  
  13.         {  
  14.             log4net.Config.XmlConfigurator.Configure();  
  15.             try  
  16.             {                  
  17.                 LoggHelper.LogInfo();  
  18.                 LoggHelper.LogWarn();  
  19.                 LoggHelper.LogError();               
  20.                 LoggHelper.LogFatal();  
  21.                 Console.ReadLine();  
  22.   
  23.             }  
  24.             catch (Exception ex)  
  25.             {  
  26.                 Console.Write(ex);  
  27.             }  
  28.         }  
  29.     }  
  30. }  


配置文件内容如下:

[csharp] view plaincopy
 
  1. <?xml version="1.0"?>  
  2. <configuration>  
  3.   <!--Log4Net config section-->  
  4.   <configSections>  
  5.     <!--<sectionGroup name="common">  
  6.       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />  
  7.     </sectionGroup>-->  
  8.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>  
  9.   </configSections>  
  10.   <!--<common>  
  11.     <logging>  
  12.       <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">  
  13.         <arg key="configType" value="INLINE"/>  
  14.       </factoryAdapter>  
  15.     </logging>  
  16.   </common>-->  
  17.   <log4net>  
  18.     <root>  
  19.       <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->  
  20.       <level value="ALL"/>  
  21.       <appender-ref ref="AdoNetAppender_SqlServer"/>  
  22.       <appender-ref ref="RollingLogFileAppender"/>  
  23.     </root>  
  24.     <!--<logger name="ErrorInfo">  
  25.       <level value="ALL" />  
  26.       <appender-ref ref="RollingLogFileAppender" />  
  27.     </logger>-->  
  28.     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
  29.       <filter type="log4net.Filter.LevelRangeFilter">  
  30.         <levelMin value="Debug" />  
  31.         <levelMax value="Info" />  
  32.       </filter>  
  33.       <param name="File" value="log\errorInfo.txt"/>  
  34.       <param name="AppendToFile" value="true"/>  
  35.       <param name="MaxSizeRollBackups" value="10"/>  
  36.       <param name="MaximumFileSize" value="2MB"/>  
  37.       <param name="RollingStyle" value="Size"/>  
  38.       <param name="StaticLogFileName" value="true"/>  
  39.       <layout type="log4net.Layout.PatternLayout">  
  40.         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  41.       </layout>  
  42.     </appender>  
  43.     <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">  
  44.       <filter type="log4net.Filter.LevelRangeFilter">  
  45.         <levelMin value="Warn" />  
  46.         <levelMax value="Fatal" />  
  47.       </filter>  
  48.       <bufferSize value="0" />  
  49.       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  50.       <connectionString value="server=XXXXX;database=WebLog;user id=UID;password=PSW;Connect Timeout=15;"/>  
  51.       <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  52.       <parameter>  
  53.         <parameterName value="@log_date" />  
  54.         <dbType value="DateTime" />  
  55.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  56.       </parameter>  
  57.       <parameter>  
  58.         <parameterName value="@thread" />  
  59.         <dbType value="String" />  
  60.         <size value="255" />  
  61.         <layout type="log4net.Layout.PatternLayout">  
  62.           <conversionPattern value="%thread" />  
  63.         </layout>  
  64.       </parameter>  
  65.       <parameter>  
  66.         <parameterName value="@log_level" />  
  67.         <dbType value="String" />  
  68.         <size value="50" />  
  69.         <layout type="log4net.Layout.PatternLayout">  
  70.           <conversionPattern value="%level" />  
  71.         </layout>  
  72.       </parameter>  
  73.       <parameter>  
  74.         <parameterName value="@logger" />  
  75.         <dbType value="String" />  
  76.         <size value="255" />  
  77.         <layout type="log4net.Layout.PatternLayout">  
  78.           <conversionPattern value="%logger" />  
  79.         </layout>  
  80.       </parameter>  
  81.       <parameter>  
  82.         <parameterName value="@message" />  
  83.         <dbType value="String" />  
  84.         <size value="2000" />  
  85.         <layout type="log4net.Layout.PatternLayout">  
  86.           <conversionPattern value="%message" />  
  87.         </layout>  
  88.       </parameter>  
  89.       <parameter>  
  90.         <parameterName value="@exception" />  
  91.         <dbType value="String" />  
  92.         <size value="4000" />  
  93.         <layout type="log4net.Layout.ExceptionLayout" />  
  94.       </parameter>  
  95.     </appender>  
  96.   </log4net>  
  97.   <!--Log4Net config section end-->  
  98. </configuration>  

四、运行结果

     1、文件      

[plain] view plaincopy
 
  1. 2011-12-31 14:40:17,440 [10] INFO  LogHelper.LoggHelper [(null)] - log日志getretertretrree  


     2、数据库

五、优化log4net在项目中的配置

    关注封装日志操作的类库LogHelper:

    

在AssemblyInfo.cs文件中加入[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Configuration/Log4Net.config", Watch = true)],即加入log4net配置项。

在文件Log4Net.config中配置如下:

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <!--Log4Net config section-->  
  4.   <configSections>  
  5.     <!--<sectionGroup name="common">  
  6.       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />  
  7.     </sectionGroup>-->  
  8.     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>  
  9.   </configSections>  
  10.   <!--<common>  
  11.     <logging>  
  12.       <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">  
  13.         <arg key="configType" value="INLINE"/>  
  14.       </factoryAdapter>  
  15.     </logging>  
  16.   </common>-->  
  17.   <log4net>  
  18.     <root>  
  19.       <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->  
  20.       <level value="ALL"/>  
  21.       <appender-ref ref="AdoNetAppender_SqlServer"/>  
  22.       <appender-ref ref="RollingLogFileAppender"/>  
  23.     </root>  
  24.     <!--<logger name="ErrorInfo">  
  25.       <level value="ALL" />  
  26.       <appender-ref ref="RollingLogFileAppender" />  
  27.     </logger>-->  
  28.     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
  29.       <param name="File" value="log\errorInfo.txt"/>  
  30.       <param name="AppendToFile" value="true"/>  
  31.       <param name="MaxSizeRollBackups" value="10"/>  
  32.       <param name="MaximumFileSize" value="2MB"/>  
  33.       <param name="RollingStyle" value="Size"/>  
  34.       <param name="StaticLogFileName" value="true"/>  
  35.       <layout type="log4net.Layout.PatternLayout">  
  36.         <!--"%d %t %p %l %m %n”:  
  37.   
  38.          1、%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2005-7-19 17:49:27,刚好适合插入SQLServer;  
  39.   
  40.          2、%t  产生该日志事件的线程名;  
  41.   
  42.          3、%p 日志的log_level,如DEBUG、WARN或者INFO;  
  43.   
  44.          4、%c  输出所属的类目,通常就是所在类的全名,如“iNotes.Default”;  
  45.   
  46.          5、%m 日志的内容;  
  47.   
  48.          6、%l  输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如write2database.main(write2database.java:33);  
  49.   
  50.          7、%n  输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”  
  51. -->  
  52.         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>  
  53.       </layout>  
  54.     </appender>  
  55.     <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">  
  56.       <filter type="log4net.Filter.LevelRangeFilter">  
  57.         <levelMin value="Warn" />  
  58.         <levelMax value="Fatal" />  
  59.       </filter>  
  60.       <bufferSize value="0" />  
  61.       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  62.       <connectionString value="server=XXXX;database=Weblog;user id=UID;password=PSW"/>  
  63.       <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />  
  64.       <parameter>  
  65.         <parameterName value="@log_date" />  
  66.         <dbType value="DateTime" />  
  67.         <layout type="log4net.Layout.RawTimeStampLayout" />  
  68.       </parameter>  
  69.       <parameter>  
  70.         <parameterName value="@thread" />  
  71.         <dbType value="String" />  
  72.         <size value="255" />  
  73.         <layout type="log4net.Layout.PatternLayout">  
  74.           <conversionPattern value="%thread" />  
  75.         </layout>  
  76.       </parameter>  
  77.       <parameter>  
  78.         <parameterName value="@log_level" />  
  79.         <dbType value="String" />  
  80.         <size value="50" />  
  81.         <layout type="log4net.Layout.PatternLayout">  
  82.           <conversionPattern value="%level" />  
  83.         </layout>  
  84.       </parameter>  
  85.       <parameter>  
  86.         <parameterName value="@logger" />  
  87.         <dbType value="String" />  
  88.         <size value="255" />  
  89.         <layout type="log4net.Layout.PatternLayout">  
  90.           <conversionPattern value="%logger" />  
  91.         </layout>  
  92.       </parameter>  
  93.       <parameter>  
  94.         <parameterName value="@message" />  
  95.         <dbType value="String" />  
  96.         <size value="255" />  
  97.         <layout type="log4net.Layout.PatternLayout">  
  98.           <conversionPattern value="%message" />  
  99.         </layout>  
  100.       </parameter>  
  101.       <parameter>  
  102.         <parameterName value="@exception" />  
  103.         <dbType value="String" />  
  104.         <size value="4000" />  
  105.         <layout type="log4net.Layout.ExceptionLayout" />  
  106.       </parameter>  
  107.     </appender>  
  108.   </log4net>  
  109.   <!--Log4Net config section end-->  
  110. </configuration>  

即把应用程序config文件下有关log4net的所有配置项移除放到单一文件Log4Net.config中,这样给应用程序的配置文件“瘦身”不少,呵呵!

ok,编译类库LoggHelper(可在里面封装对log4net的所有操作),将控制台程序改为

[csharp] view plaincopy
 
  1. static void Main(string[] args)  
  2.         {  
  3.             //log4net.Config.XmlConfigurator.Configure(); //注释掉  
  4.             try  
  5.             {                  
  6.                 LoggHelper.LogInfo();  
  7.                 LoggHelper.LogWarn();  
  8.                 LoggHelper.LogError();               
  9.                 LoggHelper.LogFatal();  
  10.                 Console.ReadLine();  
  11.   
  12.             }  
  13.             catch (Exception ex)  
  14.             {  
  15.                 Console.Write(ex);  
  16.             }  
  17.         }  

运行,一切ok!

 

附有关log4net的对数据库写日志的配置:

http://logging.apache.org/log4net/release/config-examples.html

posted on 2015-03-30 09:03  大西瓜3721  阅读(279)  评论(0编辑  收藏  举报

导航