文章出處

上一篇, 都是從別人那里拷過來的, 主要是介紹規則和說明的. 這一篇, 才是重點, 講實際使用.

首先介紹項目中最常用的配置文件方式.

一、log4net.config 文件方式

我習慣, 把log4net的配置, 放在一個單獨的配置文件中, 而不是放在 app.config或者web.config文件中, 這樣做, 雖然麻煩了一點, 但是好處就是涇渭分明, 清晰明了.

1. 首先要做的, 就是在 AssemblyInfo.cs 文件中, 加一句話

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

 

2. 接下來, 有兩種方法, 一種是在app.config/web.config文件中加兩句話, 另一種是在程序中加一句話. 那么先看第一種吧.

2.1 web.config 

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

與這無關的配置, 我都干掉了.  接下來, 可以看看我的 Log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="ErrorLogFileAppender" />
    <appender-ref ref="TraceLogFileAppender" />
  </root>

  <!--跟蹤日志輸出-->
  <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\Trace\" />
    <appendToFile value="true" />
    <MaxSizeRollBackups value="20" />
    <RollingStyle value="Date" />
    <DatePattern value="yyyy-MM-dd'.txt'" />
    <StaticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
      <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter,log4net">
      <levelMin value="DEBUG" />
      <levelMax value="INFO" />
    </filter>
  </appender>

  <!--錯誤日志輸出-->
  <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\Error\" />
    <MaxSizeRollBackups value="20" />
    <StaticLogFileName value="false" />
    <DatePattern value="yyyy-MM-dd'.txt'" />
    <RollingStyle value="Date" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
      <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter,log4net">
      <levelMin value="ERROR" />
      <levelMax value="FATAL" />
    </filter>
  </appender>
</log4net>

我在controller中, 弄了一個錯誤點, 還是把代碼貼出來吧. 清晰點

public ActionResult Index()
{
    LogHelper.Log("trace").WriteInfo("進入HomeController/Index方法");try
    {
        int a = 0;

        int b = 1;

        var s = b / a;
    }
    catch (Exception ex)
    {
        string errorMsg = string.Format(@"后臺異常信息:【{0}】,
    引發異常的方法:【{1}】,
    引發異常的對象:【{2}】",
                                            ex.Message,  //異常信息
                                            ex.TargetSite.ToString(),   //異常方法名
                                            ex.Source //引發異常的對象   
                                            );
        LogHelper.Log("logsys").WriteError(errorMsg);
    }
    LogHelper.Log("trace").WriteInfo("離開HomeController/Index方法");
    return View(list);
}

接下來看一下結果:

1). 看一下生成的目錄

 

這里使用的是日期命名的方式, 每天一個文件, 還有一種, 是使用大小限制的方式, 一個文件限制比如10M, 過了10M, 會自動重新生成一個文件.

2). 看一下日志里面記錄的內容

這里的例子, 用的都是最簡單的方式, 主要是介紹一下使用方法.

 

2.2 程序中配置的方式

public class LogHelper
{
    static LogHelper()
    {
        XmlConfigurator.Configure(new FileInfo("Log4net.config"));
    }

    private static LogHelper _instance = null;
    private static ILog ILog;

    public static LogHelper Log(Type t)
    {
        if (_instance == null)
            _instance = new LogHelper();

        ILog = LogManager.GetLogger(t);

        return _instance;
    }

    public static LogHelper Log(string sType)
    {
        if (_instance == null)
            _instance = new LogHelper();

        ILog = LogManager.GetLogger(sType);

        return _instance;
    }
    /// <summary>
    /// 寫調試信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteDebug(string msg)
    {
        ILog.Debug(msg);
    }

    /// <summary>
    /// 寫普通信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteInfo(string msg)
    {
        ILog.Info(msg);
    }

    /// <summary>
    /// 寫警告信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteWarn(string msg)
    {
        ILog.Warn(msg);
    }

    /// <summary>
    /// 寫錯誤信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteError(string msg)
    {
        ILog.Error(msg);
    }

    /// <summary>
    /// 寫錯誤信息
    /// </summary>
    /// <param name="msg">消息</param>
    /// <param name="ex">錯誤信息</param>
    public void WriteError(string msg, Exception ex)
    {
        ILog.Error(msg, ex);
    }

    /// <summary>
    /// 寫重大錯誤信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteFatal(string msg)
    {
        ILog.Fatal(msg);
    }
}

主要是 XmlConfigurator.Configure() 方法. config里面app.config/web.config文件中不加配置, 加這一句話也是可以的.

看一下結果:

這里只有Begin logging , 為啥沒有 End logging呢, 這個是logger自動加的, 會在結束的時候加上去的.

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()