Log4Net.Config配置信息《轉》

看了log4net的簡單使用之一_log4net介紹 你們對log4net組件應該有了大概的瞭解,下面再近一步介紹其在項目中如何應用。html

1.Loggerweb

全部的記錄器都必須實現 ILog 接口,該接口提供日誌記錄所需的大量方法。數據庫

public interface ILog : ILoggerWrapperapp

{工具

 void Debug(...);測試

 void Error(...);網站

 void Fatal(...);this

 void Info(...);spa

 void Warn(...);debug

 bool IsDebugEnabled { get; }

 bool IsErrorEnabled { get; }

 bool IsFatalEnabled { get; }

 bool IsInfoEnabled { get; }

 bool IsWarnEnabled { get; }

 

}

一般狀況下,咱們經過 LogManager.GetLogger() 來獲取一個記錄器。LogManager 內部維護一個 hashtable,保存新建立 Logger 引用,下次須要時直接從 hashtable 獲取其實例。

ILog log = LogManager.GetLogger(this.GetType());

log.Debug("aaaaaaaaaaaaaaa");

全部 Logger 的參數設置都直接或間接繼承自 root,其繼承關係相似 namespace。好比,名爲 "MyLogger.X.Y" 參數設置繼承自 "MyLogger.X"。當咱們建立 "MyLooger.X.Y" 記錄器時,會在配置文件找該名稱的記錄器設置,若是沒找到,則按繼承關係向上查找,直到 root。所以,在建立 Logger 時,咱們一般使用類型名稱作爲記錄器的名字,缺省狀況下,它會使用 root 或某一個父配置,但在須要的時候,咱們隨時能夠爲具體的類型添加一個更加 "詳細" 的配置。

 
 1<?xml version="1.0" encoding="utf-8" ?> 
 2<log4net>
 3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
 4    <layout type="log4net.Layout.PatternLayout">
 5      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
 6    </layout>
 7  </appender>
 8
 9  <logger name="Learn.Library.Log4netTest">
10    <level value="ALL" />
11  </logger>
12
13  <root>
14    <level value="OFF" />
15    <appender-ref ref="Console" />
16  </root>
17</log4net>
18
 


 

"appender-ref" 參數用於綁定一個或多個具體的 Appender。

 

 
 1<?xml version="1.0" encoding="utf-8" ?>
 2<log4net>
 3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
 4  </appender>
 5
 6  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
 7  </appender>
 8
 9  <root>
10    <level value="DEBUG" />
11    <appender-ref ref="Console" />
12    <appender-ref ref="RollingFile" />
13  </root>
14</log4net>
15
 


  2 Appender / Layout

Log4net 提供了大量的 Appender,最經常使用的包括 AdoNetAppender、AspNetTraceAppender、ConsoleAppender、FileAppender、OutputDebugStringAppender。每種 Appender 都有特定一些參數,使用時直接從《Log4net 手冊》的示例中拷貝過去,就OK了。(代碼摘自 Log4net 手冊)

(1) AspNetTraceAppender

1<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
2  <layout type="log4net.Layout.PatternLayout">
3    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
4  </layout>
5</appender>
6

(2) ConsoleAppender

1<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
2  <layout type="log4net.Layout.PatternLayout">
3    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
4  </layout>
5</appender>
6

(3) FileAppender

 
1<appender name="FileAppender" type="log4net.Appender.FileAppender">
2  <file value="log-file.txt" />
3  <appendToFile value="true" />
4  <layout type="log4net.Layout.PatternLayout">
5    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
6  </layout>
7</appender>
8
 

 

有關 Layout 詳細信息,請參考 Log4net 相關文檔,本文不作詳述。

3. Configuration

Log4net 的配置方式十分靈活,便可以寫到應用程序配置文件中,也可使用獨立配置文件。同時它還提供了監測配置文件變化的功能,這樣咱們隨時能夠調整配置,而無須重啓應用程序。

(1) 使用 app.config / web.config

配置app.config / web.config文件

 
  1<?xml version="1.0" encoding="utf-8"?>
  2<!-- 
  3    注意: 除了手動編輯此文件之外,您還可使用 
  4    Web 管理工具來配置應用程序的設置。可使用 Visual Studio 中的
  5     「網站」->「Asp.Net 配置」選項。
  6    設置和註釋的完整列表在 
  7    machine.config.comments 中,該文件一般位於 
  8    \Windows\Microsoft.Net\Framework\v2.x\Config 中
  9-->
 10<configuration>
 11  <configSections>
 12    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
 13  </configSections>
 14  <appSettings/>
 15  <connectionStrings/>
 16  <log4net>
 17    <root>
 18      <level value="ALL" />
 19      <appender-ref ref="LogFileAppender" />
 20      <appender-ref ref="RollingFileAppender" />
 21      <appender-ref ref="AdoNetAppender_SqlServer" />
 22    </root>
 23    <!--
 24寫入文件中-->
 25    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
 26      <file value="D:\log-file1.txt" />
 27      <!-- Example using environment variables in params -->
 28      <!-- <file value="${TMP}\log-file.txt" /> -->
 29      <!--<sppendToFile value="true" />-->
 30      <!-- An alternate output encoding can be specified -->
 31      <!-- <encoding value="unicodeFFFE" /> -->
 32      <layout type="log4net.Layout.PatternLayout">
 33        <!--<footer value="[Footer] Test By Ring1981  " />-->
 34        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
 35      </layout>
 36      <!-- Alternate layout using XML            
 37            <layout type="log4net.Layout.XMLLayout" /> -->
 38    </appender>
 39
 40    <!-- 將日誌以回滾文件的形式寫到文件中
 41爲作測試,我把文件大小設置爲1K,大於它,就從新生成文檔
 42-->
 43    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" Threshold="Error" >
 44      <file value="log.txt" />
 45      <appendToFile value="true" />
 46      <rollingStyle value="Size" />
 47      <maxSizeRollBackups value="10" />
 48      <maximumFileSize value="1KB" />
 49      <staticLogFileName value="true" />
 50      <layout type="log4net.Layout.PatternLayout">
 51        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
 52      </layout>
 53    </appender>
 54
 55
 56    <!-- 將日誌記錄到數據庫中。採用存儲過程兩種方式
 57     備註:也可採用SQL語句的方式,主要就是commandType, commandText屬性設置不一樣,請
 58        參見log4net官方文檔
 59 -->
 60    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender" Threshold="Fatal" >
 61      <bufferSize value="0" />
 62      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 63      <connectionString value="data source=.;initial catalog=aigoshop;integrated security=false;persist security info=True;User ID=sa;Password=" />
 64      <commandType value="StoredProcedure" />
 65      <commandText value="WriteLog" />
 66      <parameter>
 67        <parameterName value="@log_date" />
 68        <dbType value="DateTime" />
 69        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
 70      </parameter>
 71      <parameter>
 72        <parameterName value="@thread" />
 73        <dbType value="String" />
 74        <size value="255" />
 75        <layout type="log4net.Layout.PatternLayout" value="%thread" />
 76      </parameter>
 77      <parameter>
 78        <parameterName value="@log_level" />
 79        <dbType value="String" />
 80        <size value="20" />
 81        <layout type="log4net.Layout.PatternLayout" value="%level" />
 82      </parameter>
 83      <parameter>
 84        <parameterName value="@logger" />
 85        <dbType value="String" />
 86        <size value="255" />
 87        <layout type="log4net.Layout.PatternLayout" value="%logger" />
 88      </parameter>
 89      <parameter>
 90        <parameterName value="@message" />
 91        <dbType value="String" />
 92        <size value="4000" />
 93        <layout type="log4net.Layout.PatternLayout" value="%message" />
 94      </parameter>
 95    </appender>
 96
 97
 98  </log4net>
 99  <system.web>
100
101    <compilation debug="false" />
102   
103    <authentication mode="Windows" />
104   
105  </system.web>
106</configuration>
107
 

 

使用代碼初始化配置。

log4net.Config.XmlConfigurator.Configure();

 

(2) 使用自定義配置文件

test.log4net

 
 1<?xml version="1.0" encoding="utf-8" ?> 
 2<log4net>
 3  <appender name="Console" type="log4net.Appender.ConsoleAppender">
 4    <layout type="log4net.Layout.PatternLayout">
 5      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
 6    </layout>
 7  </appender>
 8  
 9  <root>
10    <level value="DEBUG" />
11    <appender-ref ref="Console" />
12  </root>
13</log4net>
14
 

 

使用代碼初始化配置。

log4net.Config.XmlConfigurator.Configure(new FileInfo("test.log4net"));

使用 XmlConfigurator.ConfigureAndWatch() 方法除了初始化配置外,還會監測配置文件的變化,一旦發生修改,將自動刷新配置。

(3) XmlConfiguratorAttribute

咱們還可使用 XmlConfiguratorAttribute 代替 XmlConfigurator.Config()/ConfigureAndWatch(),ConfiguratorAttribute 用於定義與 Assembly 相關聯的配置文件名。

方式1: 關聯到 test.log4net,並監測變化。

[assembly:log4net.Config.XmlConfigurator(ConfigFile="test.log4net", Watch=true)]

方式2: 關聯到 test.exe.log4net (或 test.dll.log4net,文件名前綴爲當前程序集名稱),並監測變化。

[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch=true)]


4.
應用log4netDemo下載



備註:

 

CREATE TABLE [dbo].[Log] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [Date] [datetime] NOT NULL ,
    [Thread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Level] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Message] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL 
) ON [PRIMARY]
GO


CREATE PROCEDURE WriteLog
@log_date datetime,
@thread varchar(255),
@log_level varchar(20),
@logger   varchar(255),
@message varchar(4000)
AS

INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)
GO
 



運行完程序後,看到文件和數據庫日誌表都寫入了兩條。想到可否在數據庫正常打開時只寫日誌表,在數據庫鏈接不上而寫到日誌文件中呢。哈。。請看第三篇:log4net的簡單使用之三_ log4net高級應用

轉自:http://www.cnblogs.com/kevinlzf/archive/2008/07/16/1244255.html

相關文章
相關標籤/搜索