[轉貼] 簡單記錄 log4net 的用法

2018070810:32

出處:http://www.dotblogs.com.tw/yuanlin/archive/2012/05/30/72479.aspx

因為最近開始使用到 log4net,特別寫這篇文章記錄一下。
log4net 可以到這裡下載:http://logging.apache.org/log4net/
下載完畢後先將 log4net.dll 加入參考,加入後會在 Bin 資料夾裡面多出 log4net.xml 檔,這個檔案內容非常多,是說明如何撰寫說明檔,有興趣的朋友可以看看,我們這裡先將他刪除。
然後新增一個 xml 格式的檔案,將他命名為 log4net.config ,我將他放在網站根目錄下,log4net.config 的設定
01 <?xml version="1.0"?>
02  
03 <log4net>
04   <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
05     <file value="LogFiles/"/> <!--存放log檔案的路徑-->
06     <staticLogFileName value="false"/>
07     <appendToFile value="true"/>
08     <rollingStyle value="Date"/>
09     <datePattern value="yyyyMMdd.lo\g"/> <!--log檔案的命名-->
10     <layout type="log4net.Layout.PatternLayout">
11       <conversionPattern value="%-5p %date{yyyy/MM/dd HH:mm:ss} %-20c{1} %-20M %m%n"/>
12     </layout>
13   </appender>
14   <root>
15     <level value="ALL"/>
16     <appender-ref ref="RollingFileAppender"/>
17   </root>
18 </log4net>

上面的設定是將 log 檔案以天作分隔從在 LogFiles 資料夾中
再來設定 Global.asax
1 void Application_Start(object sender, EventArgs e)
2 {
3     string log4netPath = Server.MapPath("~/log4net.config");
4     log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(log4netPath));
5 }

設定完上面兩個步驟就可以開始使用了
01 public partial class _Default : System.Web.UI.Page
02 {
03     static ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
04  
05     protected void Page_Load(object sender, EventArgs e)
06     {
07         if (!IsPostBack)
08         {
09             logger.Info("現在在 Page_Load 中");
10         }
11     }
12     protected void Button1_Click(object sender, EventArgs e)
13     {
14         logger.Info("按下 Button1");
15     }
16 }

輸出結果
INFO  2012/05/30 12:18:09 _Default             Page_Load            現在在 Page_Load 中
INFO  2012/05/30 12:18:11 _Default             Button1_Click        按下 Button1
相關閱讀:
log4net 設定檔的官方範例
log4net 使用指南
log4net 中logger默认日志等级的设计意图详解
log4net的日志输出格式-log4net.Layout.PatternLayout用法

************************************************************************************************************
個人整理出來的重點內容

---------------------------------------------------------------------------------------------------------------------------------
Web.config

    <!-- log4net.config檔路徑 -->
    <add key="log4netPath" value="D:\Desktop\FtsNet\FTS_TicketByBR\log4net.config" />
---------------------------------------------------------------------------------------------------------------------------------
Default.aspx.cs

        protected void Page_Load(object sender, EventArgs e)
        {
            //使用預設的輸出log的等級
            //log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            //使用自訂的日誌記錄器logger
            log4net.ILog log = log4net.LogManager.GetLogger("DebugMode");

            log.Debug("這是debug等級");
            log.Info("這是info等級");
            log.Warn("這是warn等級");
            log.Error("這是error等級");
            log.Fatal("這是fatal等級");
        }
---------------------------------------------------------------------------------------------------------------------------------
Global.asax

        protected void Application_Start(object sender, EventArgs e)
        {
            //指定log4net.config檔路徑
            string log4netPath = ConfigurationManager.AppSettings["log4netPath"].ToString();
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(log4netPath));
        }
---------------------------------------------------------------------------------------------------------------------------------
log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!--
  所有logger的根基,root的設置在所有logger中都起作用。
  當在root和logger中重複設定相同的appender時,你會發現同一日誌訊息將被記錄兩次。
  -->
  <root>
    <!--輸出log的等級 All < Debug < Info < Warn < Error < Fatal < Off-->
    <!--設定的log等級及其以上的等級才會顯示-->
    <!--預設為Info等級,Debug等級的log不會輸出-->
    <level value="Info" />
    <appender-ref ref="RollingFileAppender" />
  </root>

  <!--日誌記錄器logger,可以有多個-->
  <logger name="DebugMode">
    <level value="DEBUG" />
  </logger>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="LogFiles/" /> <!--存放log檔案的路徑-->
    <staticLogFileName value="false" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd.\tx\t" /> <!--log檔案的命名-->
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date{yyyy/MM/dd HH:mm:ss} [%-5level] %file:%line - %message%newline" />
    </layout>
  </appender>
</log4net>
---------------------------------------------------------------------------------------------------------------------------------