-1
我有一個web應用程序。我想在遠程機器上使用syslog Appender在log4j中寫入此web應用程序的日誌文件。日誌文件寫入Syslog服務器但文件名是Class.Log。我想給出適當的日誌文件名稱。我該如何做?如何使用log4j在java中在syslog服務器中編寫單獨的日誌文件
我有一個web應用程序。我想在遠程機器上使用syslog Appender在log4j中寫入此web應用程序的日誌文件。日誌文件寫入Syslog服務器但文件名是Class.Log。我想給出適當的日誌文件名稱。我該如何做?如何使用log4j在java中在syslog服務器中編寫單獨的日誌文件
我有一個工作示例:
對於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="<128>%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。在線路中(使用傳統轉發格式時),每條系統日誌消息以<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
}
}
你應該在你的系統日誌服務器「目的地」模式。在那裏您必須聲明.log文件的名稱。 –
感謝Asier的回覆。但在這裏我已經使用rsyslog.conf文件來配置日誌文件的位置。在這裏我使用了下面的配置:$ template RemoteLogs,「/ var/log /%HOSTNAME%/%PROGRAMNAME%.log」* *。*?RemoteLogs &〜。文件夾是使用HOSTNAME創建的,但是日誌文件名顯示爲CLASS.log –
哼哼哼哼哼哼哼哼哼哼哼哼哼嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚嗚〜一個簡單的方法來實現這一點,如果沒有很多類寫入,將創建兩個(或你有不同的類)Syslog服務器,每個服務器在不同的端口。然後,在客戶端,定義兩個不同的syslogAppenders(一個用於端口1,另一個用於端口2)。 –