C#中使用Log4記錄日志


Log4Net配置還是挺簡單的,具體:

1、新建Web或者Webform項目,使用Nuget下載log4net

2、新建Config文件夾,將log4net配置文件放入此文件夾中(當修改web.config的時候會重啟網站,所以把log4net單獨出來比較好,也好管理),log4net配置:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="fatalAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="FATAL" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <param name="File" value="Logs\\"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="-1"/>
    <!--超過1024KB則自動新增文件-->
    <param name="MaximumFileSize" value="1024KB"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="StaticLogFileName" value="false"/>
    <!--&quot;不能少-->
    <param name="DatePattern" value="&quot;fatal_&quot;yyyyMMdd&quot;.txt&quot;"/>
    <param name="Encoding" value="utf-8"/>
    <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="ERROR" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <param name="File" value="Logs\\"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="-1"/>
    <!--超過1024KB則自動新增文件-->
    <param name="MaximumFileSize" value="1024KB"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="StaticLogFileName" value="false"/>
    <!--&quot;不能少-->
    <param name="DatePattern" value="&quot;error_&quot;yyyyMMdd&quot;.txt&quot;"/>
    <param name="Encoding" value="utf-8"/>
    <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="warnAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="WARN" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <param name="File" value="Logs\\"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="-1"/>
    <!--超過1024KB則自動新增文件-->
    <param name="MaximumFileSize" value="1024KB"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="StaticLogFileName" value="false"/>
    <!--&quot;不能少-->
    <param name="DatePattern" value="&quot;warn_&quot;yyyyMMdd&quot;.txt&quot;"/>
    <param name="Encoding" value="utf-8"/>
    <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="INFO" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <param name="File" value="Logs\\"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="-1"/>
    <!--超過1024KB則自動新增文件-->
    <param name="MaximumFileSize" value="1024KB"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="StaticLogFileName" value="false"/>
    <!--&quot;不能少-->
    <param name="DatePattern" value="&quot;info_&quot;yyyyMMdd&quot;.txt&quot;"/>
    <param name="Encoding" value="utf-8"/>
    <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <!--只有級別是DEBUG的日志才能輸出-->
      <levelToMatch value="DEBUG" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <param name="File" value="Logs\\"/>
    <param name="AppendToFile" value="true"/>
    <param name="MaxSizeRollBackups" value="-1"/>
    <!--超過1024KB則自動新增文件-->
    <param name="MaximumFileSize" value="1024KB"/>
    <param name="RollingStyle" value="Composite"/>
    <param name="StaticLogFileName" value="false"/>
    <!--&quot;不能少-->
    <param name="DatePattern" value="&quot;debug_&quot;yyyyMMdd&quot;.txt&quot;"/>
    <param name="Encoding" value="utf-8"/>
    <!--為空默認情況下會獨占日志文件,不能被File.Open,通過"log4net.Appender.FileAppender+MinimalLock"使用最小鎖定模型以允許多個進程可以寫入同一個文件-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="fatalAppender" />
    <appender-ref ref="errorAppender" />
    <appender-ref ref="warnAppender" />
    <appender-ref ref="infoAppender" />
    <appender-ref ref="debugAppender" />
  </root>
</log4net>

 3、右鍵點擊第2步驟的log4net文件屬性,改成如圖所示

在app.config或者web.config中的configuration節點下加入:

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

4、在Properties下的AssemblyInfo.cs文件中加入

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

我寫了一個log4幫助類方便使用,代碼:

 1     public static class Log4Helper
 2     {
 3         public static void Fatal(Type type, object message, Exception exception = null)
 4         {
 5             ILog log = LogManager.GetLogger(type);
 6             if (exception == null)
 7                 log.Fatal(message);
 8             else
 9                 log.Fatal(message, exception);
10         }
11 
12         public static void Error(Type type, object message, Exception exception = null)
13         {
14             ILog log = LogManager.GetLogger(type);
15             if (exception == null)
16                 log.Error(message);
17             else
18                 log.Error(message, exception);
19         }
20 
21         public static void Warn(Type type, object message, Exception exception = null)
22         {
23             ILog log = LogManager.GetLogger(type);
24             if (exception == null)
25                 log.Warn(message);
26             else
27                 log.Warn(message, exception);
28         }
29 
30         public static void Info(Type type, object message, Exception exception = null)
31         {
32             ILog log = LogManager.GetLogger(type);
33             if (exception == null)
34                 log.Info(message);
35             else
36                 log.Info(message, exception);
37         }
38 
39         public static void Debug(Type type, object message, Exception exception = null)
40         {
41             ILog log = LogManager.GetLogger(type);
42             if (exception == null)
43                 log.Debug(message);
44             else
45                 log.Debug(message, exception);
46         }
47     }

5、調用:

1             Log4Helper.Fatal(this.GetType(), "Fatal");
2             Log4Helper.Error(this.GetType(), "Error", new Exception("error"));
3             Log4Helper.Warn(this.GetType(), "Warn");
4             Log4Helper.Info(this.GetType(), "Info");
5             Log4Helper.Debug(this.GetType(), "Debug");

在根目錄會有一個Log文件夾,文件夾內容:

最后說下Log4Net跨項目使用:

如果我們將log4net幫助類放在另一個公共的類庫項目中,又需要在另一個引用的項目中使用log4helper類,

這時候僅需要在該項目里的Properties下的AssemblyInfo.cs文件中加入這句:

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

 


免責聲明!

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



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