Wie zum konfigurieren der Logger Programmatisch in log4j2.02?
Will ich mit log4j ohne jede Datei konfigurieren.
Was ich wan-zu-tun ist etwas wie:
logger = (Logger) LogManager.getLogger(this.getClass());
String pattern = "[%level] %m%n";
//do something to make this logger output to an local file "/xxx/yyy/zzz.log"
Ich gefunden habe, folgende Antwort: Konfiguration Von Log4j Logger Programmatisch.
Aber die docs von Logger#addAppender
sagt:
Diese Methode ist nicht ausgesetzt durch die öffentliche API und wird in Erster Linie für unit-Tests.
Ich bin nicht sicher, ob dies der richtige Weg ist, um diese Methode in meinem code oder gibt es andere bessere Lösung um mein problem zu lösen.
InformationsquelleAutor der Frage Eastsun | 2014-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die offizielle Dokumentation zeigt ein Beispiel : Programmgesteuert Hinzufügen, um die Aktuelle Konfiguration
Mit diesen Einschränkungen :
Diese Lösung vermeidet das verwenden die Methode aus der core-Umsetzung
org.apache.logging.log4j.core.Logger
und es vermeidet schmutzige Besetzung, wie :InformationsquelleAutor der Antwort ToYonos
Mit der neuesten version von
log4j2
alle erstellen, die die APIs wiegeworden sind veraltet, es ist besser, verwenden Sie ein benutzerdefiniertes Protokoll
ConfigurationFactory
zusammen mitConfigurationBuilder
für die Festlegung der log-Konfiguration programmgesteuert.InformationsquelleAutor der Antwort Dev
Wenn ich einfach nur Antworten auf Ihre Anforderung, ich kann Ihnen drei Optionen. Ich benutze die erste für eine Art von bootstrap-Logger config; aber ich dachte, das zweite wäre notwendig auf den ersten. Ihre Dritte Wahl scheint umständlich, da müssen Sie zum aufrufen verschiedener log4j-API-s zu bekommen konfiguriert.
Verwendung von Log4j über das einfache logging-framework für Java ...
Machen eine 'minimale' oder 'default' log4j.Eigenschaften-Datei in Ihre Ressourcen für die JAR-Datei. Dann deklarieren Sie einige Statik...
Schreiben Ihre config in ein StreamWriter-statt einer Datei in der JAR, und geben Sie dann den Stream an die log-Konfigurator als StringReader und verwenden Sie das Beispiel oben (mehr oder weniger).
Können Sie die slf4j-API zu tun, Ihre log-config, statt zu schreiben direkt an Log4j. Die meisten Orte, die ich habe lieber die SLF4J-route.
Persönlich bevorzuge ich option #1; es ist leicht zu pflegen. einfach, und Sie können immer wieder, um den code zu akzeptieren/suchen Sie nach einer Datei zu laden ersten. Es gibt einige andere seitliche Alleen, die Sie betrachten können, wie das setzen von Umgebungsvariablen programmatisch beim start-up. Das scheint gekünstelt auf mich.
Die Art, wie ich mit #1 ist die Etablierung einer Standard - /bootstrap-logger-Konfiguration über die Ressourcen-Datei, welche selbst bekommt eingewickelt in die JAR-Datei. Sie können neu konfigurieren, die Dinge 'später', während diese option bietet Ihnen ein minimalistisches, star-up-oder bootstrap-config. In den frühen Stadien fand ich Dinge, die waren (noch) nicht geloggt, weil der logger-Initialisierung wurde noch passieren auf embedded apps. Also hielt ich die einfache Möglichkeit für die bootstrap - (oder Standard -) als basic immer da. Hoffe, das hilft.
InformationsquelleAutor der Antwort will