Dropwizard nicht melden Brauch die Logger-Datei
Ich habe eine dropwizard-app, wo ich den konfigurierten logger appenders zur Datei wie folgt:
logging:
level: INFO
loggers:
"mylogger": INFO
"com.path.to.class": INFO
appenders:
- type: file
currentLogFilename: .logs/mylogs.log
archivedLogFilenamePattern: .logs/archive.%d.log.gz
archivedFileCount: 14
Und erstellt logger in meiner app:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final Logger OpLogger = LoggerFactory.getLogger("mylogger");
(and)
private final Logger ClassLogger = LoggerFactory.getLogger(pathToClass.class);
Einige Tests Protokollierung in main():
OpLogger.info("test 1");
ClassLogger.info("test 2);
Die Anwendung startet und läuft ohne Probleme; aber ich bekomme keine logs (außer der Jetty-access-Protokolle, natürlich, korrekt gedruckt zu mylogs.Protokoll), die weder in stdout oder in mylogs.log-Datei. Stattdessen, wenn ich entfernen Sie die Logger-Konfiguration in der Konfiguration.yml, ich bekomme alle Protokolle gedruckt auf stdout.
Vielleicht ist es ein problem von dropwizard oder muss ich etwas hinzufügen, um der Konfiguration.yml?
Ich bin mit Dropwizard 0.8.0
- Sie haben Standard-logging-level INFO schon, zuweisen INFO zu bestimmten Klassen ist überflüssig an dieser Stelle. Nur zur info.
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE Die neueste version von dropwizard unterstützt die Protokollierung Konfigurationen aus der box
Ich lief in das gleiche Problem, die versuchen, Dropwizard (0.8.4) mit einem separaten Dateien. Ich lief in das gleiche Problem. So grub ich etwas tiefer und fand eine Lösung für mich (nicht der sauberste, aber ich konnte nicht scheinen, Sie arbeiten anders).
Das Problem ist, dass
LoggingFactory#configure
fügt automatisch alle appender root. Dies ist nicht sehr ideal, so ist es nötig, überschreiben. Was ich Tat, war:LoggingFactory
.Dies ist etwas chaotisch, da gibt es ein paar Dinge, die kopiert werden müssen-leider : - (Hier ist meine Umsetzung:
Als Sie kann se, ich mussten leider kopieren/einfügen ein paar private member und Methoden, die Dinge so funktionieren wie Sie sollen.
Habe ich ein neues Feld:
Dies ermöglicht es mir, konfigurieren Sie eine Zuordnung für die einzelnen logger. Dies war nicht aus der box darf, wie ich kann nicht einen Namen bekommen (dropwizard-Standardeinstellungen der appender mit Namen, sehr unbequem ...)
So, ich habe eine neue Logger, die in meinem Fall auch tut hostname substitution, die ich brauchte, aus verschiedenen Gründen. Dazu habe ich das überschreiben der guten alten
FileAppenderFactory
und Umsetzung eigener SchnittstelleMappedLogger
. Umsetzung hier:Bitte beachten Sie, dass, um eine neue json-Typ, müssen Sie in der JavaDoc-in
AppenderFactory
(Add-Meta-inf-Datei, um den classpath und machen den neuen appender erkennbar)So weit So gut, wir haben nun eine config, die abholen kann auf logger-mappings, haben wir uns einen logger, der kann einen optionalen Namen.
In der configure-Methode, die ich jetzt binden Sie die beiden zusammen:
Abwärtskompatibilität hielt ich das default-Verhalten. Wenn kein name definiert ist, wird der appender Hinzugefügt werden, dem root-logger. Ansonsten kann ich beheben das typisierte logger und fügen Sie den appender, um es wie gewünscht.
Und nicht zuletzt die gute alte yaml config:
Wie Sie sehen können ich bin Zuordnung der Ereignisse appender zu den Veranstaltungen logger. Auf diese Weise werden alle meine Veranstaltungen am Ende in der Datei A, während die anderen Informationen, die landet irgendwo anders.
Ich hoffe, das hilft. Vielleicht nicht die sauberste Lösung, aber ich glaube nicht, dass Dropwizard ermöglicht dieses feature derzeit.
import
s zu deinem Beispiel? Danke.Können Sie implementieren, separate logger mit dropwizard Verwendung von logback.
1.Konfigurieren-logger in Ihrem Antrag Klasse (ich.e Anwendung starten Punkt mit main-Methode), wie unten.
2.Konfigurieren logback.xml wie im Bild unten gezeigt.
3.Jetzt logger
EDIT :
Habe ich versucht zu implementieren, die den gleichen logger in meinem Beispiel-Projekt. Es funktioniert in meinem Fall. Wir können nicht mit dem LOGGER vor der Dropwizard-Anwendung initialisieren. Die Dropwizard nur initialisiert, wenn Sie anrufen
So, wenn logger wird verwendet, bevor Dropwizard initialisiert Ihre Anmeldung wird nicht da sein. Ich habe versucht, umgesetzt Szenario mit main-Methode. Die erste log-Anweisung nicht gedruckt, wie wir verwendet haben, logger, bevor die Dropwizard-Initialisierung, aber die zweite log-Anweisung gedruckt werden.
Hoffe, dies wird Ihnen helfen, Ihr problem zu lösen.