Log4j 2 nicht in Datei schreiben
Mit der folgenden config-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSS} %-5level] %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="error.log">
<PatternLayout pattern="[%d{ISO8601} %-5level] %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="errors" level="error">
<AppenderRef ref="File"/>
</Logger>
<Root level="all">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
schreibt nur (alle) Anmeldung an die Konsole ausgegeben. Ich hatte jedoch die Absicht, etwas zu schreiben, über error
eine Datei mit dem Namen error.log
mit einem etwas anderen format. Allerdings läuft meine Anwendung, Ergebnisse in alles, was in der Konsole geschrieben, so dass eine leere Datei hinter (wird geschaffen, die einfach nicht gefüllt).
Irgendwie scheint es wie der Root-logger fängt alles, weil ich hatte es auch so probiert:
<Logger name="errors" level="error">
<AppenderRef ref="Console"/>
</Logger>
dem loggen nicht zweimal. Ich bin aus Ideen wirklich, ich kopierte sogar ein Beispiel aus den docs (Beispiel #2 von hier) und das aswell hinterlässt eine leere Datei.
InformationsquelleAutor Bart Pelle | 2014-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, der root-logger der level ist ALLE, also wird es erhalten für alle Veranstaltungen.
Eine Möglichkeit ist, dies zu tun:
Diese Weise haben Sie nur einen logger, so dass Sie nicht brauchen, um sorgen über die additivität und in Ihrem code können Sie einfach schreiben
LogManager.getLogger(MyClass.class)
zu bekommenLogger
Instanz. (Wenn Sie eine benannte Logger, müssten Sie die logger-Namen in Ihrem code:LogManager.getLogger("error")
.)InformationsquelleAutor Remko Popma
Ah, ich war dumm. Das Attribut
name
scheint ein filter für die Klassen verwenden, die logger. Ändernname
zu meinem top-level-Paket ist das Problem behoben.InformationsquelleAutor Bart Pelle
Log4J2 nicht in Datei schreiben, bis der Vorgang abgeschlossen ist. Standardmäßig wird der Puffer nicht geleert mit jedem Aufruf der logger.
Zum Beispiel,
nicht anmelden, um die Datei sofort. Ändern Sie die Werte der immediateFlush auf true zu erzwingen, den Puffer zu leeren, das bei jedem Aufruf logger.
InformationsquelleAutor Mike Ashby
Versuchen, diese so etwas wie dieses.
Hier Ziel ist wichtiges Attribut, um beachtet zu werden.
Den console-appender hat ein param-element definiert. Blick auf die javadoc für ConsoleAppender , die setTarget-Methode wird verwendet, um zu wählen, welche Konsole streamen zu print-Nachrichten-System.out oder System.err. Die Beispiel werden die appender für die Verwendung von System..
InformationsquelleAutor Sireesh Yarlagadda