簡體   English   中英

如何使用log4j在Java中的syslog服務器中寫入單獨的日志文件

[英]How to write separate log file in syslog server in java using log4j

我有一個Web應用程序,我想使用log4j中的Syslog Appender在遠程計算機中寫入此Web應用程序的日志文件。該日志文件寫在Syslog服務器中,但文件名為Class.Log。 我要提供正確的日志文件名。該怎么辦?

我有一個工作的例子:

對於log4j2,請勿使用Syslog附加程序。 我必須以這種方式使用Socket附加程序( PatternLayout元素模擬了用於在網絡中發送數據的傳統轉發格式,請參見: smtradfwd.c ):

<Configuration status="error" strict="true" monitorInterval="30"
            name="XMLConfigTest" packages="org.apache.logging.log4j.test">
    <Properties>
        <Property name="REMOTE_HOST">some.ip.address</Property>
        <Property name="APP_NAME">rest-server</Property>
    </Properties>

    <Appenders>
        <Socket name="REMOTE" host="${REMOTE_HOST}" port="514" protocol="TCP">
            <PatternLayout pattern="&lt;128&gt;%d{MMM dd HH:mm:ss} ${hostName} ${APP_NAME}[${sys:PID}]: %-5level %c  %M - %msg%xEx%n" />
        </Socket>
    </Appenders>
    <Loggers>
        <Root level="INFO">
        <AppenderRef ref="REMOTE"/>
    </Root>
    </Loggers>
</Configuration>

<128>表示設施LOCAL0 請參閱: rsyslog.h 在網絡中(以及使用傳統轉發格式時),每個syslog消息<FACILITY_NUMBER>開頭。

在服務器端,rsyslog應該這樣配置:

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

# Dynamic file
template (name="AppFile" type="string" string="/var/log/remote/%programname%.log")

if ( $fromhost-ip == 'the.remote.ip.address' ) then {

    if ( $programname == 'rest-server' and $syslogfacility-text == 'local0' ) then {
        action(type="omfile" Sync="on" FileCreateMode="0640" DynaFile="AppFile")
        & stop
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM