C# 利用Log4Net進行日志記錄


概述

本文主要簡單說明如何使用Log4Net進行日志記錄,在程序開發過程中記錄日志的優點:

  • 它可以提供應用程序運行時的精確環境,可供開發人員盡快找到應用程序中的Bug;
  • 一旦在程序中加入了Log 輸出代碼,程序運行過程中就能生成並輸出日志信息而無需人工干預。
  • 日志信息可以輸出到不同的地方(控制台,文件等)以備以后研究之用。

關於Log4Net的官方說明:

The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime. We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the.NET runtime。

【粗略翻譯】Apache log4net 類庫是一個幫助程序員輸出日志狀態到多種目標平台。log4net 是優秀的 Apache log4jTM 框架在微軟.Net平台的一個實現。在保持原有log4j的思想的前提下,同時利用.Net的新特性。

Log4Net 在程序中使用,可以通過配置文件,進行配置,也可以通過程序代碼進行定義。本文主要講解一下通過配置的方式實現

配置文件結構,如下圖所示:

配置文件可以配置在App.config中【編譯后會生成對應的[程序名].exe.config】,也可以配置在獨立的xml文件中。

如果配置在獨立的xml文件中,需要在Assembly.cs中增加一句說明,如下所示:

[assembly: log4net.Config.DOMConfigurator(ConfigFile = "Log4NetConfig.xml", ConfigFileExtension = "xml", Watch = true)]

如果配置在App.config中,除了配置log4net節點外,還要對節點進行聲明,即要增加configSection節點【放在根節點的第一個元素】,如下所示

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

生成的日志文件內容,如下圖所示:

核心代碼

代碼如下:

 1 using log4net;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 [assembly: log4net.Config.XmlConfigurator(Watch = true)]
 9 namespace DemoLog4Net
10 {
11     /// <summary>
12     /// 日志記錄
13     /// </summary>
14     public class LogHelper
15     {
16         /// <summary>
17         /// 日志實例
18         /// </summary>
19         private static ILog logInstance=LogManager.GetLogger("testApp");
20 
21         public static void WriteLog(string message ,LogLevel level) {
22             switch (level) {
23                 case LogLevel.Debug:
24                     logInstance.Debug(message);
25                     break;
26                 case LogLevel.Error:
27                     logInstance.Error(message);
28                     break;
29                 case LogLevel.Fatal:
30                     logInstance.Fatal(message);
31                     break;
32                 case LogLevel.Info:
33                     logInstance.Info(message);
34                     break;
35                 case LogLevel.Warn:
36                     logInstance.Warn(message);
37                     break;
38                 default:
39                     logInstance.Info(message);
40                     break;
41             }
42         }
43     }
44 
45     public enum LogLevel {
46         Debug=0,
47         Error=1,
48         Fatal=2,
49         Info=3,
50         Warn=4
51     }
52 }
View Code

獨立配置文件如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <log4net>
 3   <root>
 4     <level value="DEBUG" />
 5     <appender-ref ref="LogFileAppender" />
 6     <appender-ref ref="ConsoleAppender" />
 7   </root>
 8   <logger name="testApp">
 9     <level value="DEBUG" />
10   </logger>
11   <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
12     <param name="File" value="${TMO}log-file.txt" />
13     <StaticLogFileName value="false"/>
14     <param name="AppendToFile" value="true" />
15     <layout type="log4net.Layout.PatternLayout">
16       <param name="Header" value="[Header]&#13;&#10;"/>
17       <param name="Footer" value="[Footer]&#13;&#10;"/>
18       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n"/>
19     </layout>
20     <filter type="log4net.Filter.LevelRangeFilter">
21       <param name="LevelMin" value="DEBUG" />
22       <param name="LevelMax" value="ERROR" />
23     </filter>
24   </appender>
25   <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
26     <layout type="log4net.Layout.PatternLayout">
27       <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
28     </layout>
29   </appender>
30 </log4net>
View Code


附加:

如何設置環境變量:

 System.Environment.SetEnvironmentVariable("TMO", DateTime.Now.ToString("yyyyMMdd"));

日志記錄優先級如下表所示:

 

級別 允許的方法 Boolean屬性 優先級別
OFF     Highest
FATAL void Fatal(...); bool IsFatalEnabled;  
RROR void Error(...); bool IsErrorEnabled;  
WARN void Warn(...); bool IsWarnEnabled;  
INFO void Info(...); bool IsInfoEnabled;  
DEBUG void Debug(...); bool IsDebugEnabled;  
ALL     Lowest
 

 

 

 

 

 

 

 

 

備注:

log4net確實是一個應用廣泛且簡單好用的日志記錄框架,本文只是簡單的說明,后續工作中會繼續研究其他的功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM