2017-03-09 4 views
-1

Ich habe eine Web-Anwendung.Ich möchte Log-Datei dieser Web-Anwendung in Remote-Rechner mit Syslog Appender in Log4j schreiben.Die Log-Datei wird in den Syslog-Server geschrieben .Der Dateiname lautet Class.Log. Ich möchte den richtigen Protokolldateinamen angeben. Wie kann ich das tun?Wie schreibe ich separate Log-Datei in Syslog-Server in Java mit log4j

+0

Sie sollten ein "Ziel" Modus in Ihrem Syslog-Server:

In Server-Seite sollte rsyslog wie diese konfiguriert werden. Dort müssen Sie den Namen der .log-Datei deklarieren. –

+0

Danke Asier für deine Antwort.Aber hier habe ich die Datei rsyslog.conf verwendet, um den Speicherort der Protokolldatei zu konfigurieren.Hier habe ich die folgende Konfiguration verwendet: $ template RemoteLogs, "/ var/log /% HOSTNAME% /% PROGRAMNAME% .log" * *. *? RemoteLogs & ~. Der Ordner wird mit HOSTNAME erstellt, aber der Name der Protokolldatei wird als CLASS.log angezeigt. –

+0

Hum ... was Sie versuchen scheint schwierig für den Syslog-Server, würden Sie etwas wie Logstash benötigen, um den genauen Klassennamen zu nehmen. Ein einfacher Weg, um dies zu erreichen, wenn es nicht viele Klassen gibt, würde zwei (oder so viele verschiedene Klassen, die Sie haben) Syslog-Server erstellen, jeder an einem anderen Port. Definieren Sie dann auf Ihrer Clientseite zwei verschiedene syslogApp- ders (einen für Port 1 und den anderen für Port 2). –

Antwort

0

Ich habe ein funktionierendes Beispiel:

Für log4j2 nicht die Syslog appender verwenden. Ich hatte Socket appender auf diese Weise zu verwenden (das PatternLayout Element simuliert das klassische Speditionsformat für Daten in dem Draht zu senden finden Sie unter: 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> bedeutet Einrichtung LOCAL0. Siehe: rsyslog.h. In der Leitung (und bei Verwendung des herkömmlichen Weiterleitungsformats) beginnt jede Syslog-Nachricht mit <FACILITY_NUMBER>.

# 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 
    } 

} 
Verwandte Themen