天天看點

log4net的簡單使用之二_log4net應用

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

1.Logger

所有的記錄器都必須實作 ILog 接口,該接口提供日志記錄所需的大量方法。

public interface ILog : ILoggerWrapper

{

 void Debug(...);

 void Error(...);

 void Fatal(...);

 void Info(...);

 void Warn(...);

 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

log4net的簡單使用之二_log4net應用

<?xml version="1.0" encoding="utf-8" ?> 

 2

log4net的簡單使用之二_log4net應用

<log4net>

 3

log4net的簡單使用之二_log4net應用

  <appender name="Console" type="log4net.Appender.ConsoleAppender">

 4

log4net的簡單使用之二_log4net應用

    <layout type="log4net.Layout.PatternLayout">

 5

log4net的簡單使用之二_log4net應用

      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />

 6

log4net的簡單使用之二_log4net應用

    </layout>

 7

log4net的簡單使用之二_log4net應用

  </appender>

 8

log4net的簡單使用之二_log4net應用

 9

log4net的簡單使用之二_log4net應用

  <logger name="Learn.Library.Log4netTest">

10

log4net的簡單使用之二_log4net應用

    <level value="ALL" />

11

log4net的簡單使用之二_log4net應用

  </logger>

12

log4net的簡單使用之二_log4net應用

13

log4net的簡單使用之二_log4net應用

  <root>

14

log4net的簡單使用之二_log4net應用

    <level value="OFF" />

15

log4net的簡單使用之二_log4net應用

    <appender-ref ref="Console" />

16

log4net的簡單使用之二_log4net應用

  </root>

17

log4net的簡單使用之二_log4net應用

</log4net>

18

log4net的簡單使用之二_log4net應用

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

 1

log4net的簡單使用之二_log4net應用

<?xml version="1.0" encoding="utf-8" ?>

 2

log4net的簡單使用之二_log4net應用

<log4net>

 3

log4net的簡單使用之二_log4net應用

  <appender name="Console" type="log4net.Appender.ConsoleAppender">

 4

log4net的簡單使用之二_log4net應用

  </appender>

 5

log4net的簡單使用之二_log4net應用

 6

log4net的簡單使用之二_log4net應用

  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">

 7

log4net的簡單使用之二_log4net應用

  </appender>

 8

log4net的簡單使用之二_log4net應用

 9

log4net的簡單使用之二_log4net應用

  <root>

10

log4net的簡單使用之二_log4net應用

    <level value="DEBUG" />

11

log4net的簡單使用之二_log4net應用

    <appender-ref ref="Console" />

12

log4net的簡單使用之二_log4net應用

    <appender-ref ref="RollingFile" />

13

log4net的簡單使用之二_log4net應用

  </root>

14

log4net的簡單使用之二_log4net應用

</log4net>

15

log4net的簡單使用之二_log4net應用

  2 Appender / Layout

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

(1) AspNetTraceAppender

1

log4net的簡單使用之二_log4net應用

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >

2

log4net的簡單使用之二_log4net應用

  <layout type="log4net.Layout.PatternLayout">

3

log4net的簡單使用之二_log4net應用

    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

4

log4net的簡單使用之二_log4net應用

  </layout>

5

log4net的簡單使用之二_log4net應用

</appender>

6

log4net的簡單使用之二_log4net應用

(2) ConsoleAppender

1

log4net的簡單使用之二_log4net應用

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

2

log4net的簡單使用之二_log4net應用

  <layout type="log4net.Layout.PatternLayout">

3

log4net的簡單使用之二_log4net應用

    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

4

log4net的簡單使用之二_log4net應用

  </layout>

5

log4net的簡單使用之二_log4net應用

</appender>

6

log4net的簡單使用之二_log4net應用

(3) FileAppender

1

log4net的簡單使用之二_log4net應用

<appender name="FileAppender" type="log4net.Appender.FileAppender">

2

log4net的簡單使用之二_log4net應用

  <file value="log-file.txt" />

3

log4net的簡單使用之二_log4net應用

  <appendToFile value="true" />

4

log4net的簡單使用之二_log4net應用

  <layout type="log4net.Layout.PatternLayout">

5

log4net的簡單使用之二_log4net應用

    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

6

log4net的簡單使用之二_log4net應用

  </layout>

7

log4net的簡單使用之二_log4net應用

</appender>

8

log4net的簡單使用之二_log4net應用

有關 Layout 詳細資訊,請參考 Log4net 相關文檔,本文不做詳述。

3. Configuration

Log4net 的配置方式十分靈活,即可以寫到應用程式配置檔案中,也可以使用獨立配置檔案。同時它還提供了監測配置檔案變化的功能,這樣我們随時可以調整配置,而無須重新開機應用程式。

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

配置app.config / web.config檔案

  1

log4net的簡單使用之二_log4net應用

<?xml version="1.0" encoding="utf-8"?>

  2

log4net的簡單使用之二_log4net應用

<!-- 

  3

log4net的簡單使用之二_log4net應用

    注意: 除了手動編輯此檔案以外,您還可以使用 

  4

log4net的簡單使用之二_log4net應用

    Web 管理工具來配置應用程式的設定。可以使用 Visual Studio 中的

  5

log4net的簡單使用之二_log4net應用

     “網站”->“Asp.Net 配置”選項。

  6

log4net的簡單使用之二_log4net應用

    設定和注釋的完整清單在 

  7

log4net的簡單使用之二_log4net應用

    machine.config.comments 中,該檔案通常位于 

  8

log4net的簡單使用之二_log4net應用

    \Windows\Microsoft.Net\Framework\v2.x\Config 中

  9

log4net的簡單使用之二_log4net應用

-->

 10

log4net的簡單使用之二_log4net應用

<configuration>

 11

log4net的簡單使用之二_log4net應用

  <configSections>

 12

log4net的簡單使用之二_log4net應用

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

 13

log4net的簡單使用之二_log4net應用

  </configSections>

 14

log4net的簡單使用之二_log4net應用

  <appSettings/>

 15

log4net的簡單使用之二_log4net應用

  <connectionStrings/>

 16

log4net的簡單使用之二_log4net應用

  <log4net>

 17

log4net的簡單使用之二_log4net應用

    <root>

 18

log4net的簡單使用之二_log4net應用

      <level value="ALL" />

 19

log4net的簡單使用之二_log4net應用

      <appender-ref ref="LogFileAppender" />

 20

log4net的簡單使用之二_log4net應用

      <appender-ref ref="RollingFileAppender" />

 21

log4net的簡單使用之二_log4net應用

      <appender-ref ref="AdoNetAppender_SqlServer" />

 22

log4net的簡單使用之二_log4net應用

    </root>

 23

log4net的簡單使用之二_log4net應用

    <!--

 24

log4net的簡單使用之二_log4net應用

寫入檔案中-->

 25

log4net的簡單使用之二_log4net應用

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">

 26

log4net的簡單使用之二_log4net應用

      <file value="D:\log-file1.txt" />

 27

log4net的簡單使用之二_log4net應用

      <!-- Example using environment variables in params -->

 28

log4net的簡單使用之二_log4net應用

      <!-- <file value="${TMP}\log-file.txt" /> -->

 29

log4net的簡單使用之二_log4net應用

      <!--<sppendToFile value="true" />-->

 30

log4net的簡單使用之二_log4net應用

      <!-- An alternate output encoding can be specified -->

 31

log4net的簡單使用之二_log4net應用

      <!-- <encoding value="unicodeFFFE" /> -->

 32

log4net的簡單使用之二_log4net應用

      <layout type="log4net.Layout.PatternLayout">

 33

log4net的簡單使用之二_log4net應用

        <!--<footer value="[Footer] Test By Ring1981  " />-->

 34

log4net的簡單使用之二_log4net應用

        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />

 35

log4net的簡單使用之二_log4net應用

      </layout>

 36

log4net的簡單使用之二_log4net應用

      <!-- Alternate layout using XML            

 37

log4net的簡單使用之二_log4net應用

            <layout type="log4net.Layout.XMLLayout" /> -->

 38

log4net的簡單使用之二_log4net應用

    </appender>

 39

log4net的簡單使用之二_log4net應用

 40

log4net的簡單使用之二_log4net應用

    <!-- 将日志以復原檔案的形式寫到檔案中

 41

log4net的簡單使用之二_log4net應用

為做測試,我把檔案大小設定為1K,大于它,就重新生成文檔

 42

log4net的簡單使用之二_log4net應用

-->

 43

log4net的簡單使用之二_log4net應用

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" Threshold="Error" >

 44

log4net的簡單使用之二_log4net應用

      <file value="log.txt" />

 45

log4net的簡單使用之二_log4net應用

      <appendToFile value="true" />

 46

log4net的簡單使用之二_log4net應用

      <rollingStyle value="Size" />

 47

log4net的簡單使用之二_log4net應用

      <maxSizeRollBackups value="10" />

 48

log4net的簡單使用之二_log4net應用

      <maximumFileSize value="1KB" />

 49

log4net的簡單使用之二_log4net應用

      <staticLogFileName value="true" />

 50

log4net的簡單使用之二_log4net應用

      <layout type="log4net.Layout.PatternLayout">

 51

log4net的簡單使用之二_log4net應用

        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

 52

log4net的簡單使用之二_log4net應用

      </layout>

 53

log4net的簡單使用之二_log4net應用

    </appender>

 54

log4net的簡單使用之二_log4net應用

 55

log4net的簡單使用之二_log4net應用

 56

log4net的簡單使用之二_log4net應用

    <!-- 将日志記錄到資料庫中。采用存儲過程兩種方式

 57

log4net的簡單使用之二_log4net應用

     備注:也可采用SQL語句的方式,主要就是commandType, commandText屬性設定不同,請

 58

log4net的簡單使用之二_log4net應用

        參見log4net官方文檔

 59

log4net的簡單使用之二_log4net應用

 -->

 60

log4net的簡單使用之二_log4net應用

    <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender" Threshold="Fatal" >

 61

log4net的簡單使用之二_log4net應用

      <bufferSize value="0" />

 62

log4net的簡單使用之二_log4net應用

      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

 63

log4net的簡單使用之二_log4net應用

      <connectionString value="data source=.;initial catalog=aigoshop;integrated security=false;persist security info=True;User ID=sa;Password=" />

 64

log4net的簡單使用之二_log4net應用

      <commandType value="StoredProcedure" />

 65

log4net的簡單使用之二_log4net應用

      <commandText value="WriteLog" />

 66

log4net的簡單使用之二_log4net應用

      <parameter>

 67

log4net的簡單使用之二_log4net應用

        <parameterName value="@log_date" />

 68

log4net的簡單使用之二_log4net應用

        <dbType value="DateTime" />

 69

log4net的簡單使用之二_log4net應用

        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />

 70

log4net的簡單使用之二_log4net應用

      </parameter>

 71

log4net的簡單使用之二_log4net應用

      <parameter>

 72

log4net的簡單使用之二_log4net應用

        <parameterName value="@thread" />

 73

log4net的簡單使用之二_log4net應用

        <dbType value="String" />

 74

log4net的簡單使用之二_log4net應用

        <size value="255" />

 75

log4net的簡單使用之二_log4net應用

        <layout type="log4net.Layout.PatternLayout" value="%thread" />

 76

log4net的簡單使用之二_log4net應用

      </parameter>

 77

log4net的簡單使用之二_log4net應用

      <parameter>

 78

log4net的簡單使用之二_log4net應用

        <parameterName value="@log_level" />

 79

log4net的簡單使用之二_log4net應用

        <dbType value="String" />

 80

log4net的簡單使用之二_log4net應用

        <size value="20" />

 81

log4net的簡單使用之二_log4net應用

        <layout type="log4net.Layout.PatternLayout" value="%level" />

 82

log4net的簡單使用之二_log4net應用

      </parameter>

 83

log4net的簡單使用之二_log4net應用

      <parameter>

 84

log4net的簡單使用之二_log4net應用

        <parameterName value="@logger" />

 85

log4net的簡單使用之二_log4net應用

        <dbType value="String" />

 86

log4net的簡單使用之二_log4net應用

        <size value="255" />

 87

log4net的簡單使用之二_log4net應用

        <layout type="log4net.Layout.PatternLayout" value="%logger" />

 88

log4net的簡單使用之二_log4net應用

      </parameter>

 89

log4net的簡單使用之二_log4net應用

      <parameter>

 90

log4net的簡單使用之二_log4net應用

        <parameterName value="@message" />

 91

log4net的簡單使用之二_log4net應用

        <dbType value="String" />

 92

log4net的簡單使用之二_log4net應用

        <size value="4000" />

 93

log4net的簡單使用之二_log4net應用

        <layout type="log4net.Layout.PatternLayout" value="%message" />

 94

log4net的簡單使用之二_log4net應用

      </parameter>

 95

log4net的簡單使用之二_log4net應用

    </appender>

 96

log4net的簡單使用之二_log4net應用

 97

log4net的簡單使用之二_log4net應用

 98

log4net的簡單使用之二_log4net應用

  </log4net>

 99

log4net的簡單使用之二_log4net應用

  <system.web>

100

log4net的簡單使用之二_log4net應用

101

log4net的簡單使用之二_log4net應用

    <compilation debug="false" />

102

log4net的簡單使用之二_log4net應用

103

log4net的簡單使用之二_log4net應用

    <authentication mode="Windows" />

104

log4net的簡單使用之二_log4net應用

105

log4net的簡單使用之二_log4net應用

  </system.web>

106

log4net的簡單使用之二_log4net應用

</configuration>

107

log4net的簡單使用之二_log4net應用

使用代碼初始化配置。

log4net.Config.XmlConfigurator.Configure();

(2) 使用自定義配置檔案

test.log4net

 1

log4net的簡單使用之二_log4net應用

<?xml version="1.0" encoding="utf-8" ?> 

 2

log4net的簡單使用之二_log4net應用

<log4net>

 3

log4net的簡單使用之二_log4net應用

  <appender name="Console" type="log4net.Appender.ConsoleAppender">

 4

log4net的簡單使用之二_log4net應用

    <layout type="log4net.Layout.PatternLayout">

 5

log4net的簡單使用之二_log4net應用

      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />

 6

log4net的簡單使用之二_log4net應用

    </layout>

 7

log4net的簡單使用之二_log4net應用

  </appender>

 8

log4net的簡單使用之二_log4net應用

 9

log4net的簡單使用之二_log4net應用

  <root>

10

log4net的簡單使用之二_log4net應用

    <level value="DEBUG" />

11

log4net的簡單使用之二_log4net應用

    <appender-ref ref="Console" />

12

log4net的簡單使用之二_log4net應用

  </root>

13

log4net的簡單使用之二_log4net應用

</log4net>

14

log4net的簡單使用之二_log4net應用

使用代碼初始化配置。

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下載下傳

備注:

log4net的簡單使用之二_log4net應用
log4net的簡單使用之二_log4net應用

CREATE TABLE [dbo].[Log] (

log4net的簡單使用之二_log4net應用

    [ID] [int] IDENTITY (1, 1) NOT NULL ,

log4net的簡單使用之二_log4net應用

    [Date] [datetime] NOT NULL ,

log4net的簡單使用之二_log4net應用

    [Thread] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,

log4net的簡單使用之二_log4net應用

    [Level] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,

log4net的簡單使用之二_log4net應用

    [Logger] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,

log4net的簡單使用之二_log4net應用

    [Message] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL 

log4net的簡單使用之二_log4net應用

) ON [PRIMARY]

log4net的簡單使用之二_log4net應用

GO

log4net的簡單使用之二_log4net應用
log4net的簡單使用之二_log4net應用
log4net的簡單使用之二_log4net應用

CREATE PROCEDURE WriteLog

log4net的簡單使用之二_log4net應用

@log_date datetime,

log4net的簡單使用之二_log4net應用

@thread varchar(255),

log4net的簡單使用之二_log4net應用

@log_level varchar(20),

log4net的簡單使用之二_log4net應用

@logger   varchar(255),

log4net的簡單使用之二_log4net應用

@message varchar(4000)

log4net的簡單使用之二_log4net應用

AS

log4net的簡單使用之二_log4net應用
log4net的簡單使用之二_log4net應用

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

log4net的簡單使用之二_log4net應用

GO

運作完程式後,看到檔案和資料庫日志表都寫入了兩條。想到能否在資料庫正常打開時隻寫日志表,在資料庫連接配接不上而寫到日志檔案中呢。哈。。請看第三篇:log4net的簡單使用之三_ log4net進階應用

備注:

參考:Log4net 簡明手冊 - Q_yuhen.htm