2013-07-22 95 views
-1

在配置文件中如何使用非同步 在不同appaender包單獨的I有兩個不同的包裝,並使用不同的附加器,我想單獨的日誌輸出 前兩個附加器是不同的包和第三附加器是不同的一個 我需要的所有附加器連接到ASYNCH ... 請幫助我解決這個log4j的2配置問題

這裏我的配置文件..

<?xml version="1.0" encoding="UTF-8"?> 
<configuration strict="true" status="WARN"> 

    <appenders> 
     <Console name="CONSOLE" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
     </Console> 
     <File name="MyFile" fileName="Logger/knight.log"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
     </File> 
     <File name="Except" fileName="log1/Execption9.log"> 
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
     </File> 
     <Async name="Async"> 
      <appender-ref ref="CONSOLE" /> 
      <appender-ref ref="MyFile" /> 
      <appender-ref ref="Except" /> 
     </Async> 

    </appenders> 
    <loggers> 
     <root level="all"> 
      <appender-ref ref="Async" /> 
     </root> 

    </loggers> 
</configuration> 

回答

0

您可以配置三個獨立的AsyncAppenders,每個文件appende的rs和一個用於控制檯,然後將root配置爲:

<root> 
    <appender-ref ref="async-console" level="info" /> 
    <appender-ref ref="async-file1" level="trace" /> 
    <appender-ref ref="async-file2" level="error" /> 
    </root> 

但是,此解決方案爲您提供三個線程。爲什麼不使用AsyncLogger(使用選擇器命令行選項,請參閱AsyncLoggers的文檔)? 這樣你只有一個日誌記錄線程,它可能也快很多...

+0

你現在即時通訊使用AsyncLogger其工作...但我有一些疑惑 – MoorthyKS

+0

現在即時通訊使用AsyncLogger其工作...但我有一些疑問1. Logger和root之間有什麼區別?即時通訊有點困惑... 2.如果我在我的課堂上有一個例外,我想單獨登錄該消息...有關dis的任何想法? – MoorthyKS

+0

根是默認(回退)記錄器。命名記錄器將與您在代碼中創建記錄器時使用的名稱相匹配。例如,你的代碼有:Logger log = LogManager.getLogger(「my.package.MyClass」); - 在配置中, ...將所有錯誤級別日誌發送給名稱以「my.package」開頭的記錄器到單獨的appender。查看關於addability的log4j2文檔以獲取更多示例和詳細信息。 –