1. 程式人生 > >Log4Net使用詳解(續)

Log4Net使用詳解(續)

說明自從上次在2008年在部落格上發表過有關log4net的用法介紹文章之後(網址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx),有不少朋友在博文下留言詢問一些細節,現在就一些比較普遍的問題做一些稍微深入的解答,希望大家滿意。
首先說明一點的是,log4net解決的問題是提供一個記錄日誌的框架,它提供了向多種目標寫入的實現,比如利用log4net可以方便地將日誌資訊記錄到檔案、控制檯、Windows事件日誌和資料庫(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般來說我們只需要提供一個描述性的字串,然後log4net就會自動提供有關執行時的一些資訊。
Log4Net的版本仍是1.2.10(2008年我寫博文的時候也是這個版本),有.NET1.0和.NET1.1和.NET2.0版本,如果有正在使用高於.NET2.0開發的也不用擔心,可以直接引用這個類庫,像在.NET2.0中開發一樣,它的網址是:

http://logging.apache.org/log4net/
關於在Web中支援的問題
在我們開發專案時都會使用到config檔案,可以在config檔案中配置log4net。這一點Web專案和WinForm專案都是一樣的。需要注意的是,因為在Web專案中一般以較低許可權的角色來執行Web專案的,所以在使用檔案型日誌時要注意不要放在本專案根資料夾之外。
在config檔案中的配置

要使用log4net,首先要在config檔案的<configSections>節點中增加配置(如果沒有這個節點請手動增加),如下:

  1. <configSections>
  2.     <sectionname="log4net"type="System.Configuration.IgnoreSectionHandler"/>
  3. </configSections>

除此之外,還要在頂級節點<configuration>下增加<log4net>子節點。在<log4net>節點下就可以增加<appender>子節點,每個<appender>子節點代表一種記錄日誌的方式(僅在這裡配置了不代表啟用了)。
具體說來有如下Appender:
AdoNetAppender:利用ADO.NET記錄到資料庫的日誌。
AnsiColorTerminalAppender:在ANSI 視窗終端寫下高亮度的日誌事件。
AspNetTraceAppender:能用asp.net中Trace的方式檢視記錄的日誌。
BufferingForwardingAppender:在輸出到子Appenders之前先快取日誌事件。
ConsoleAppender:將日誌輸出到控制檯。
EventLogAppender:將日誌寫到Windows Event Log.
FileAppender:將日誌寫到檔案中。
LocalSyslogAppender:將日誌寫到local syslog service (僅用於UNIX環境下).
MemoryAppender:將日誌存到記憶體緩衝區。
NetSendAppender:將日誌輸出到Windows Messenger service.這些日誌資訊將在使用者終端的對話方塊中顯示。
RemoteSyslogAppender:通過UDP網路協議將日誌寫到Remote syslog service。
RemotingAppender:通過.NET Remoting將日誌寫到遠端接收端。
RollingFileAppender:將日誌以回滾檔案的形式寫到檔案中。
SmtpAppender:將日誌寫到郵件中。
TraceAppender:將日誌寫到.NET trace 系統。
UdpAppender:將日誌connectionless UDP datagrams的形式送到遠端宿主或以UdpClient的形式廣播。
關於使用log4net中可能會使用到的一些引數

%m(message):輸出的日誌訊息,如ILog.Debug(…)輸出的一條訊息
%n(new line):換行
%d(datetime):輸出當前語句執行的時刻
%r(run time):輸出程式從執行到執行到當前語句時消耗的毫秒數
%t(thread id):當前語句所在的執行緒ID
%p(priority): 日誌的當前優先級別,即DEBUG、INFO、WARN…等
%c(class):當前日誌物件的名稱,例如:
%f(file):輸出語句所在的檔名。
%l(line):輸出語句所在的行號。
%數字:表示該項的最小長度,如果不夠,則用空格填充,如“%-5level”表示level的最小寬度是5個字元,如果實際長度不夠5個字元則以空格填充。
下面以一個實際的例子來說明問題,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那麼實際的日誌中會是如下格式:
“記錄時間:2010-11-17 16:16:36,561 執行緒ID:[9] 日誌級別:檔案:所在行ERROR 出錯類:Log4NetDemo.Program property:[(null)] - 錯誤描述:error
System.Exception: 在這裡發生了一個異常,Error Number:2036084948”
關於對資料庫的支援
前面已經說過,log4net是支援包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite在內的資料庫的,如果是檔案型資料庫(如Access或SQLite)的話就需要指定資料庫檔案的位置(在Web中最好指定在有讀寫許可權的資料夾下,並且實現建立好表),如果是網路資料庫就需要指定正確的資料庫連線字串。
比如要記錄到Oracle資料庫中,在配置檔案中可以增加一個< appender>節點,配置如下:

  1. <appendername="AdoNetAppender_Oracle"type="log4net.Appender.AdoNetAppender">
  2.       <connectionTypevalue="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  3.       <connectionStringvalue="data source=[mydatabase];User ID=[user];Password=[password]"/>
  4.       <commandTextvalue="INSERT INTO Log (Datetime,Thread,Log_Level,Logger,Message) VALUES (:log_date, :thread, :log_level, :logger, :message)"/>
  5.       <bufferSizevalue="128"/>
  6.       <parameter>
  7.         <parameterNamevalue=":log_date"/>
  8.         <dbTypevalue="DateTime"/>
  9.         <layouttype="log4net.Layout.RawTimeStampLayout"/>
  10.       </parameter>
  11.       <parameter>
  12.         <parameterNamevalue=":thread"/>
  13.         <dbTypevalue="String"/>
  14.         <sizevalue="255"/>
  15.         <layouttype="log4net.Layout.PatternLayout">
  16.           <conversionPatternvalue="%thread"/>
  17.         </layout>
  18.       </parameter>
  19.       <parameter>
  20.         <parameterNamevalue=":log_level"/>
  21.         <dbTypevalue="String"/>
  22.         <sizevalue="50"/>
  23.         <layouttype="log4net.Layout.PatternLayout">
  24.           <conversionPatternvalue="%level"/>
  25.         </layout>
  26.       </parameter>
  27.       <parameter>
  28.         <parameterNamevalue=

    相關推薦

    Log4Net使用

    說明自從上次在2008年在部落格上發表過有關log4net的用法介紹文章之後(網址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx),有不少朋友在博文下留言詢問一些細節,現在就一些比較普遍的問題

    java.util包——Connection接口

    操作 相同 元素 叠代 cat roo soft true nbsp Connection接口介紹   Connection接口是java集合的root接口,沒有實現類,只有子接口和實現子接口的各種容器。主要用來表示java集合這一大的抽象概念。   Connection接

    WindowManager.LayoutParams 轉載

    鼠標 chang 結束 name ble edi status 條件 backup WindowManager.LayoutParams 是 WindowManager 接口的嵌套類;繼承於 ViewGroup.LayoutParams 。它的內容十分豐富。其實Window

    JQuery中$.ajax()方法參數轉載

    瀏覽器 object 服務器 字符串 false type: 要求為String類型的參數,請求方式(post或get)默認為get。註意其他http請求方法,例如put和 delete也可以使用,但僅部分瀏覽器支持。timeout: 要求為Number類型的參數,設置請求超時時

    Maven轉載

    odi 解決辦法 ctrl 世界 maven倉庫 避免 -- epo 時間 Maven詳解 一.前言 以前做過的項目中,沒有真正的使用過Maven,只知道其名聲很大,其作用是用來管理jar 包的。最近一段時間在項目過程中使用Maven,用Maven構建的web項目,

    Java 多線程------線程的同步

    alt 來看 監聽 介紹 創建進程 java 多線程 system ima 關鍵字 Java 多線程詳解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多線程詳解(二)------如何創建進

    實現高性能糾刪碼引擎 | 糾刪碼技術

    糾刪碼引擎 基礎知識 深入優化 技術 工程師 作者介紹: 徐祥曦,七牛雲工程師,獨立開發了多套高性能糾刪碼/再生碼編碼引擎。柳青,華中科技大學博士,研究方向為基於糾刪碼的分布式存儲系統。前言:在上篇《如何選擇糾刪碼編碼引擎》中,我們簡單了解了 Reed-Solomon Codes(RS 碼

    MongoDB執行計劃分析1

    mongo smu pre als comm 計劃 -- {} direct 正文 queryPlanner queryPlanner是現版本explain的默認模式,queryPlanner模式下並不會去真正進行query語句查詢,而是針對query語句進行執行計劃分析並

    elastic-job:數據分片

    count 任務 不同的 應該 center shc 偶數 int ext 數據分片的目的在於把一個任務分散到不同的機器上運行,既可以解決單機計算能力上限的問題,也能降低部分任務失敗對整體系統的影響。elastic-job並不直接提供數據處理的功能,框架只會將分片項分配至各

    Linux的SOCKET編程

    readv lose 服務 網絡字節序 返回值 quest avi 取數 key Linux的SOCKET編程詳解 1. 網絡中進程之間如何通信 進 程通信的概念最初來源於單機系統。由於每個進程都在自己的地址範圍內運行,為保證兩個相互通信的進 程之間既互不幹擾又

    elastic-job:Job的手動觸發功能

    方法 idt image blog per tle cnblogs ack display elastic-job的任務都是使用quartz來觸發的,quartz表達式一般都是定期執行。但有時候一些周期較長的任務,比如一天一次,幾小時一次的任務,我們需要等待很久才能觸發一次

    綜合運用: C++11 多線程下生產者消費者模型

    並發 rep 生產 我會 交流 模型 操作 const ref 生產者消費者問題是多線程並發中一個非常經典的問題,相信學過操作系統課程的同學都清楚這個問題的根源。本文將就四種情況分析並介紹生產者和消費者問題,它們分別是:單生產者-單消費者模型,單生產者-多消費者模型,多生產

    主成分分析PCA原理轉載

    增加 信息 什麽 之前 repl 神奇 cto gmail 協方差 一、PCA簡介 1. 相關背景 上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

    C/C++中作用域

    防止 局部作用域 gist 文件中 方式 為什麽不使用 形式參數 lan archive 作用域規則告訴我們一個變量的有效範圍,它在哪兒創建,在哪兒銷毀(也就是說超出了作用域)。變量的有效作用域從它的定義點開始,到和定義變量之前最鄰近的開括號配對的第一個閉括號。也就是說,作

    elastic-job:失效轉移

    shard out utm monit 設置 borde 點滴 title 等於 elastic-job中最關鍵的特性之一就是失效轉移。配置了失效轉移之後,如果在任務執行過程中有一個執行實例掛了,那麽之前被分配到這個實例的任務(或者分片)會在下次任務執行之前被重新分配到其他

    C# ListView用法

    分組 創建 cti 排列 checkbox 定義 com 程序 erl 一、ListView類 1、常用的基本屬性: (1)FullRowSelect:設置是否行選擇模式。(默認為false) 提示:只有在Details視圖該屬性才有

    C++ 模板

    創建 規則 error ++ 例如 public err iostream () 四、類模板的默認模板類型形參   1、可以為類模板的類型形參提供默認值,但不能為函數模板的類型形參提供默認值。函數模板和類模板都可以為模板的非類型形參提供默認值。   2、類模板的類型形

    C++ 智能指針

    include 復雜 測試類 信息 思想 編譯 應該 其他 eas C++ 智能指針詳解 一、簡介 由於 C++ 語言沒有自動內存回收機制,程序員每次 new 出來的內存都要手動 delete。程序員忘記 delete,流程太復雜,最終導致沒有 delete,異常導致程

    JVM的基本結構及其各部分

    後臺 棧幀 結束 依次 方法參數 ati 0.00 實例 同時存在 JVM的基本結構及其各部分詳解(一)(轉載) 1 java虛擬機的基本結構如圖: 1)類加載子系統負責從文件系統或者網絡中加載Class信息,加載的類信息存放於一塊稱為方法區的內存空間。除了類的信息外,方

    10.5-全棧Java筆記:常見流

    java上節我們講到「Java中常用流:緩沖流」,本節我們學習數據流和對象流~ 數據流數據流將“基本數據類型變量”作為數據源,從而允許程序以與機器無關方式從底層輸入輸出流中操作java基本數據類型。 DataInputStream和DataOutputStream提供了可以存取與機器無關的所有Java基礎類