Log4j - mehrere appenders schreiben in dieselbe Datei, mit einer, immer logs
Ich habe einen log4j appender definiert, wie:
log4j.logger.com.example = DEBUG, filelog
log4j.appender.filelog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.filelog.File=c:/app.log
log4j.appender.filelog.layout=org.apache.log4j.PatternLayout
log4j.appender.filelog.layout.ConversionPattern=%d | %m%n
log4j.appender.filelog.DatePattern=.dd-MM-yyyy
In meiner Klasse, ich bekomme den logger wie:
Log logger = LogFactory.getLog(getClass());
Diese funktioniert einwandfrei. Ich möchte ein logger, der immer protokolliert bestimmte Meldungen (keine Fehler, aber Dinge wie, wie lange Transaktionen nahm). Wenn ich Schreibe, diese auf DEBUG oder INFO, die ich gar nicht sehen, wenn der log-level geändert wird. Ich denke, dass ich dies mit einem anderen appender schreibt auf die gleiche Datei.
Ist dies möglich, zwei appenders schreiben in die gleiche Datei? Wie kann ich die logger-Instanz, wo ich das normale debug-appender und die Transaktions-appender in der gleichen Klasse? Diese Nachrichten nicht alle im gleichen Paket, so kann ich nicht so einstellen, dass ein bestimmtes Paket immer Abmelden. Werde ich diese appenders schreiben zu verschiedenen Dateien, oder kann ich abrufen, die Sie sowohl in den code, und haben etwas wie:
Log alwaysLogger = LogFactory.getLog(ALWAYS);
alwaysLogger.debug("This message will always be written regardless of the level set on the filelog appender");
Update
Ich könnte schreiben, zu zwei verschiedenen log-Dateien, wenn notwendig, aber wie bekomme ich die logger-Instanz in meiner Klasse? Ich will nicht konfigurieren, ein Paket/Klasse, immer ein appender über die anderen als die Klassen melden Informationen/Fehlermeldungen und die Transaktions - "immer" - Nachrichten, die während einer normal laufen. Gibt es eine Möglichkeit, das zu erreichen, was ich brauche, auch wenn es schreiben zwei verschiedene log-Dateien?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass log4j wirklich unterstützt zwei appenders schreiben auf die gleiche Datei, die da Probleme bei der Synchronisierung. Ihre beste Wette wäre, wenn möglich, zu einem Wechsel zu slf4j mit Logback wie Sie Ihre backend-logging-system seit Logback ist log4j-Nachfolger und unterstützt auch mehrere appenders schreiben in eine Datei. Check-out FileAppender und es ist klug-Modus.
Update: aus Ihrer Beschreibung scheint es, dass Sie sollten auch prüfen, die Marker. Sie brauchen nur eine logger-Instanz, und Sie können mehr feinkörnige Kontrolle der Marker benutzt werden, da mit Ihnen im wesentlichen sagen, "das log-Anweisung hat einen besonderen Zweck, und muss protokolliert werden, das mit einem geeigneten appender". Sie können auch prüfen, log-appender additivität, die in der Regel verwendet, wenn Sie zwei oder mehr appenders für eine log-Anweisung.
Soweit ich bin mir bewusst, das die Instanziierung von Loggern mit einem Paket & - class-identifier ist nur eine Konvention. Sie sind frei, zu erstellen Sie mehrere logger-Instanzen in jeder Klasse und geben Ihnen alle Bezeichner.
Als für das schreiben in die gleiche Datei, ich habe es nicht ausprobiert aber es sollte möglich sein, mindestens aus einem einzigen thread. Möglicherweise müssen Sie schreiben Sie Ihre eigenen appender anstatt sich auf eine der Standardeinstellungen.
Habe ich diese zu arbeiten, indem Sie
AsyncAppender
s. Ich hatte meine wichtigsten appender, die angegeben haben, eine Datei zu melden, und hatte meine andere appenders beziehen.z.B.
Können Sie weitere Filter, oder was auch immer zu den anderen appenders. Soweit ich sagen kann, mit meiner eigenen app, die logs scheinen zu Rollen, und die appender Filter wie erwartet funktioniert.
Ja. Sie können "Abhilfe" zu haben, 2 appenders schreiben in die gleiche Datei.
Kasse dieses code + Beispiel:
Fragen willkommen.