Logback nicht finden können logback.xml obwohl es vorhanden ist (über den Klassenpfad)
Ich habe ein Problem mit logback. Ich habe es (mit maven) und alles scheint in Ordnung, außer dass Logback-Berichte es nicht finden können in der Konfigurationsdatei (aber ich bin in der Lage, log auf der Konsole mit dem default-logger-Konfiguration).
[#|2013-07-03T07:55:30.843+0200|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=124;_ThreadName=Thread-2;|07:54:39,844 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Konnte NICHT finden die Ressource [logback.groovy]
07:54:39,844 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Konnte NICHT finden die Ressource [logback-test.xml]
07:54:39,844 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Konnte NICHT finden die Ressource [logback.xml]
07:54:39,847 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Einstellung, Standard-Konfiguration.
|#]
Lege ich die Konfigurationsdatei (genannt logback.xml) in der src/main/resources
Ordner von meinem Maven-Artefakt (das ist KRIEG).
Interessanterweise, wenn ich versuche, das laden der config aus dem Klassenpfad, die ich erfolgreich:
Reader r = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("logback.xml"));
StringWriter sw = new StringWriter();
char[] buffer = new char[1024];
for (int n; (n = r.read(buffer)) != -1; )
sw.write(buffer, 0, n);
String str = sw.toString();
System.out.println(str);
Dem druckt mein Beispiel-Konfigurations-Datei:
[#|2013-07-03T07:55:30.844+0200|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=124;_ThreadName=Thread-2;|<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root> </configuration>|#]
Meine pom.xml
hat die folgenden Einträge:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.0.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
Ist gepackt als war-Datei (innerhalb einer EAR-Datei). Die Lage des logback.xml innerhalb der war-Datei ist wie folgt: WEB-INF/classes/logback.xml
Hat jemand eine Idee, was falsch ist mit meinem setup?
Vielen Dank für Eure Hilfe
stupidSheep
- Sind Sie sicher, dass Sie die Verwendung von logback von Ihrem Krieg, und nicht vom Anwendungs-server?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lage innerhalb der war-Datei korrekt ist,
WEB-INF/classes
.Den logback-Konfiguration Dokumentation Gespräche darüber, wo die logback.xml Datei kann sich in einem Krieg, aber er erwähnt nicht, etwas über dem OHR.
Könnten Sie bitte versuchen die Daten zu diesem link? Ich Frage mich, wenn es sein muss, verpackt in das OHR in einer bestimmten Art und Weise.
(edit: zweiten link entfernt, funktionierte nicht)
Logback ruft sehr ähnlichen code, um den code in deinem Beispiel also getClassLoader().getResourceAsStream("logback.xml"). Wenn logback nicht finden können logback.xml, dann muss es sein, dass die Ressource nicht sichtbar ist class loader geladen hat die logback-Klasse. Dieser class loader ist wahrscheinlich anders als der class-loader geladen, dass Ihr test-code finden logback.xml.
Wenn Sie die Konfigurationsdatei für das logging-framework in einem KRIEG funktioniert alles wie erwartet und ohne Probleme. Aber wenn Sie versuchen, diese mit eine OHR etwas magisch passiert, das logging-framework nicht finden können, die Konfiguration-Datei. Und es nutzt seine Standard-Verhalten.
Ich löste es wie folgt:
Erstellen Sie einen neuen Ordner direkt unter dem OHR Ordner. Erstellen Sie zum Beispiel
einen neuen Ordner mit dem Namen "Klassen" --> MyEar/Klassen
Platzieren Sie Ihre logback.xml Datei in diesen neuen Ordner:
MyEar/classes/logback.xml
In Ihrer war-Datei MANIFEST.MF-Datei, fügen Sie diesen neuen Ordner, um die
classpath:
Manifest-Version: 1.0
Class-Path: Klassen
Also ich hatte ähnliches problem wo ich hatte logback.xml im classpath, aber nicht in den build-Prozess. Ich habe vor kurzem umgeschaltet, um gradle. Ich hatte Probleme anfangs mit meinem Ressource-Dateien, die nicht im build enthalten, obwohl ich extra Hinzugefügt src/main/resources zu sourceSet von bauen.gradle.
Also meine Lösung zu der Zeit war, den Typen von Dateien in die include:
Irgendwann vorbei und ich bemerkt, dass mein logging config nicht angewendet werden. Ich verbrachte viel Zeit tweaking das Protokoll und auf der Suche nach dem problem. Ich erkannte bald, dass die Datei nicht enthalten.
Erinnerte ich mich, hatte ich, um die Art von Dateien in die include. Ich habe den xml-Datentyp und es funktionierte.