Log4Net不同日志類型寫入到不同文件


1. 一直在用log4net,從來沒有自己整理過。實踐出真知,只有自己整理過才能真正掌握。

2. log4net,應該讀logfornet,以前一直說log4,log4............ 

安裝

NuGet:

AssemblyInfo.cs :

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

配置 

log4net.config

<log4net>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="DebugRollingFileAppender" />
    <appender-ref ref="InfoRollingFileAppender" />
    <appender-ref ref="WarnRollingFileAppender" />
    <appender-ref ref="ErrorRollingFileAppender" />
  </root>
  
  <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Debug/" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH&quot;.log&quot;" />
    <MaximumFileSize value="50MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} [%t] %c :%newline %m%n %newline " />
      </layout>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch  value="DEBUG" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>

  <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Info/" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH&quot;.log&quot;" />
    <MaximumFileSize value="50MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch  value="INFO" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>

  <appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Warn/" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH&quot;.log&quot;" />
    <MaximumFileSize value="50MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch  value="WARN" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>

  <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file value="Logs/Error/" />
    <appendToFile value="true" />
    <immediateFlush value="true" />
    <staticLogFileName value="false" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH&quot;.log&quot;" />
    <MaximumFileSize value="50MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch  value="ERROR" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>
    
</log4net>

客戶端

        private ILog _log = log4net.LogManager.GetLogger("LogTestController");
        public ActionResult Index()
        {
            _log.Info("Info");
            _log.Error("Error");
            _log.Debug("Debug");
            _log.Warn("Warn");

            return View();
        }

root 

1.root元素沒有屬性,所有logger默認繼承它,root是必須配置的。

2.level元素:只有在這個級別或之上的事件才會被記錄

OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL 】

3.appender-ref元素:指定一個或多個appender

 

appender

1.定義日志的輸出方式,只能作為 log4net 的子元素。name屬性必須唯一,type屬性必須指定。

【一般寫文件日志用log4net.Appender.RollingFileAppender,可以根據日期格式或者文件大小來決定是否新建一個log.txt】

2.file元素:指定日志路徑。

3.appendToFile元素:是否支持分割文件。

4.rollingStyle元素:【Size:按日志大小,Date:日期格式分割】。

5.datePattern元素:日期格式。

6.MaximumFileSize元素:最小日志文件大小。

7.layout元素:日志輸出格式。【log4net.Layout.PatternLayout】。

8.filter元素:指定級別的日志輸出【LevelMatchFilter】

  或者指定一個范圍級別的日志輸出【LevelRangeFilter】

PatterLayout的格式化字符串:

Conversion Pattern Name Effect
a 等價於appdomain
appdomain 引發日志事件的應用程序域的友好名稱。(我在使用中一般是可執行文件的名字。)
c 等價於 logger
C 等價於 type
class 等價於 type
d 等價於 date
date

發生日志事件的本地時間。 使用 DE<%utcdate 輸出UTC時間。date后面還可以跟一個日期格式,用大括號括起來。DE<例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,將使用ISO8601 格式 。

日期格式和.Net中DateTime類的ToString方法中使用的格式是一樣。

另外log4net還有3個自己的格式Formatter。 它們是 "ABSOLUTE", "DATE"和"ISO8601"分別代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %date{ISO8601}%date{ABSOLUTE}

它們的性能要好於ToString。

exception

異常信息

日志事件中必須存了一個異常對象,如果日志事件不包含沒有異常對象,將什么也不輸出。異常輸出完畢后會跟一個換行。一般會在輸出異常前加一個換行,並將異常放在最后。

F 等價於 file
file

發生日志請求的源代碼文件的名字。

警告:只在調試的時候有效。調用本地信息會影響性能。

identity

當前活動用戶的名字(Principal.Identity.Name).

警告:會影響性能。(我測試的時候%identity返回都是空的。)

l 等價於 location
L 等價於 line
location

引發日志事件的方法(包括命名空間和類名),以及所在的源文件和行號。

警告:會影響性能。沒有pdb文件的話,只有方法名,沒有源文件名和行號。

level

日志事件等級

line

引發日志事件的行號

警告:會影響性能。

logger

記錄日志事件的Logger對象的名字。

可以使用精度說明符控制Logger的名字的輸出層級,默認輸出全名。

注意,精度符的控制是從右開始的。例如:logger 名為 "a.b.c", 輸出模型為 %logger{2} ,將輸出"b.c"。

m 等價於 message
M 等價於 method
message

由應用程序提供給日志事件的消息。

mdc

MDC (舊為:ThreadContext.Properties) 現在是事件屬性的一部分。 保留它是為了兼容性,它等價於 property

method

發生日志請求的方法名(只有方法名而已)。

警告:會影響性能。

n 等價於 newline
newline

換行符

ndc

NDC (nested diagnostic context)

p 等價於 level
P 等價於 property
properties 等價於 property
property

輸出事件的特殊屬性。例如: %property{user} 輸出user屬性。屬性是由loggers或appenders添加到時間中的。 有一個默認的屬性"DE<log4net:HostName"總是會有。DE<

%property將輸出所以的屬性 。

(我除了知道可以用它獲得主機名外,還不知道怎么用。)

 
r 等價於 timestamp
t 等價於 thread
timestamp

從程序啟動到事件發生所經過的毫秒數。

thread

引發日志事件的線程,如果沒有線程名就使用線程號。

type

引發日志請求的類的全名。.

可以使用精度控制符。例如: 類名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 將輸出"PatternLayout"。(也是從右開始的。)

警告:會影響性能。

u 等價於 identity
username

當前用戶的WindowsIdentity。(類似:HostName\Username)

警告:會影響性能。

utcdate

發生日志事件的UTC時間。DE<后面還可以跟一個日期格式,用大括號括起來。DE<例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,將使用ISO8601 格式 。

日期格式和.Net中DateTime類的ToString方法中使用的格式是一樣。

另外log4net還有3個自己的格式Formatter。 它們是 "ABSOLUTE", "DATE"和"ISO8601"分別代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %date{ISO8601}%date{ABSOLUTE}

它們的性能要好於ToString。

w 等價於 username
x 等價於 ndc
X 等價於 mdc
%

%%輸出一個百分號

參考文檔:

http://peibing211.blog.163.com/blog/static/37116360200992811595469/

 


 

本文博客園地址:http://www.cnblogs.com/struggle999/p/7111436.html 
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,但是未經作者本人同意,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。

 


免責聲明!

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



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