2017-08-30 59 views
0

在我們的java項目中,我們將日誌發送到各種appender。如何通過更改像log4j.xml這樣的配置文件(不需要干涉代碼),將日誌寫入rsyslog所有從「error」級別和更高級別寫入這些appender的日誌?將現有log4j appenders的日誌寫入所有帶有調試級別「錯誤」或更高級別的日誌到rsyslog

How to log error and info messages separately into syslog with log4j?,有一個解釋如何創建一個新的appender,並從我的理解,跟進與答案我需要觸摸代碼。

我的log4j的版本是:2.4.1 這裏是我們寫的一臺機器一個小的log4j.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" monitorInterval="5"> 
    <Appenders> 
     <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="log/la.full.log" filePattern="log/la.full.%d{yy-dd-MM}.%i.log"> 
     <PatternLayout> 
     <Pattern>%highlight{%d{DEFAULT}|%5p|%6t|%X|%m%n}</Pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="10 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="100"/> 
    </RollingRandomAccessFile> 
    <Console name="STDOUT" target="SYSTEM_OUT"> 
    <PatternLayout pattern="%highlight{%d{DEFAULT}|%5p|%6t|%X|%m%n}"/> 
    </Console> 
    </Appenders> 
    <Loggers> 
    <Root level="debug" additivity="false"> 
     <AppenderRef ref="STDOUT" level="DEBUG"/> 
     <AppenderRef ref="RollingRandomAccessFile" level="DEBUG"/> 
    </Root> 
    </Loggers> 
</Configuration> 
+1

您可以添加一個配置代表片段嗎?你很可能不需要觸摸代碼。 – Fildor

+1

哦,請添加您使用的log4j版本。 < 2.0 and > = 2.0之間有一些主要區別。 – Fildor

+0

我編輯了問題中的信息 – Tomer

回答

1

給你添加一個appender的rsyslog現在(這應該是從某處如果不是已經內置),你只需要再添加一個附加目的地-REF互聯網:

<Loggers> 
    <Root level="debug" additivity="false"> 
     <AppenderRef ref="STDOUT" level="DEBUG"/> 
     <AppenderRef ref="RollingRandomAccessFile" level="DEBUG"/> 
     <AppenderRef ref="RSYSLOG" level="ERROR"/> 
    </Root> 
</Loggers> 

關於日誌等級:設置在根記錄的level將經歷調試及更高版本(調試信息「過濾器」消息e rror,...)。在appender上設置它也會進一步過濾到該級別(或更高)。所以如果你將appender-ref的level屬性設置爲「error」(如上所示),它只會得到級別錯誤和更高的消息。另一個appender不會受到此影響,仍然會記錄調試和信息消息。