2016-06-09 8 views
2

Ich habe eine Test-Webanwendung in Maven erstellt, die Logback verwendet. Hier ist meine logback.xml Konfigurationsdatei:logback.xml Datei wird nicht geladen

<configuration scan="true"> 

    <!-- For more information: http://logback.qos.ch/manual/configuration.html --> 

    <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> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/myapp.log</file> 

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>D:/Oracle/user_projects/domains/base_domain/servers/AdminServer/logs/archive/myapp.%d{yyyy-MM-dd}.log</fileNamePattern> 

     <!-- keep 31 days' worth of history --> 
     <maxHistory>31</maxHistory> 
    </rollingPolicy> 

    <encoder> 
     <pattern>%date [%level] [%thread] [%file:%line] %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="debug"> 
    <appender-ref ref="FILE" /> 
    <appender-ref ref="STDOUT" /> 
    </root> 

</configuration> 

ich diese Datei kopiert haben sowohl src/main/resources und src/test/resources

Wenn ich laufen mvn test, funktioniert alles einwandfrei. Das Testprotokoll-Nachricht wird an geschrieben sowohl die Konsole als auch die myapp.log Datei:

public class TestLogService extends TestCase { 

    public TestLogService(String name) { 
     super(name); 
    } 

    public void testLogMessage() throws Exception { 
     LogService.debug("Hello from {}!", "TestLogService"); 
    } 

} 

Danach laufe ich mvn install und Bereitstellen der resultierenden Krieg Datei (die logback.xml unter WEB-INF/classes hat) zu meinem lokaler WebLogic-Server. Sobald das erledigt ist, traf ich ein Test-Servlet, die angeblich nur eine einzige Anweisung in die Protokolldatei protokollieren:

public class TestServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public TestServlet() { 
     // TODO Auto-generated constructor stub 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     LogService.debug("Hello from {}!", "doGet()"); 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 
} 

Aber abgesehen von der „Served auf:/myapp“ -Ausgabe, passiert nichts! Nichts wird in die Protokolldatei oder in die Konsole geschrieben. Ich bekomme nicht einmal Fehlermeldungen auf der Konsole. Es ist, als ob das Logback im Hintergrund stünde oder so.

Und die LogService Klasse ist nur ein Wrapper für logback Anrufe:

public class LogService { 

    private static Logger logger = LoggerFactory.getLogger("com.myapp"); 

    public static void debug(String message) { 
     logger.debug(message); 
    } 

    public static void debug(String message, Object... argArray) { 
     logger.debug(message, argArray); 
    } 
} 

Ich versuchte logback.configurationFile Eigenschaft in meinem Java Einstellung Startoptionen, wie gut es programmatisch Einstellung wie hier detailliert (Setting logback.xml path programmatically).

Aber ich habe das gleiche Ergebnis mit beiden Ansätze: mvn test protokolliert die Nachricht einwandfrei, aber nichts passiert, wenn ich das Test-Servlet auf localhost ausführen.

Irgendeine Idee, was das Problem sein könnte?

Weitere Informationen

ich einige Debug-Anweisungen zu LogService hinzugefügt:

System.out.println("[LogService.debug] isDebugEnabled = " + logger.isDebugEnabled()); 
System.out.println("[LogService.debug] getName = " + logger.getName()); 
System.out.println("[LogService.debug] ROOT_LOGGER_NAME = " + Logger.ROOT_LOGGER_NAME); 
System.out.println("[LogService.debug] toString = " + logger.toString()); 

Und jetzt mvn test und schlagen die TestServlet unterschiedlichen Ausgang geben:

mvn test says:          TestServlet says: 
-----------------------------------------------  ----------------------------------------------- 
[LogService.debug] isDebugEnabled = true   [LogService.debug] isDebugEnabled = false 
[LogService.debug] getName = com.myapp    [LogService.debug] getName = com.myapp 
[LogService.debug] ROOT_LOGGER_NAME = ROOT   [LogService.debug] ROOT_LOGGER_NAME = ROOT 
[LogService.debug] toString = Logger[com.myapp]  [LogService.debug] toString = org.slf4j.impl.JDK14LoggerAdapter(com.myapp) 

so dass zumindest erklärt Warum sehe ich keine Debug-Log-Anweisungen vom TestServlet. Jetzt muss ich nur herausfinden, warum.

+0

Zur Fehlerbehebung versuchen Sie, die Debugausgabe mit '' zu aktivieren. Alternativ aktivieren Sie Debug mit einer Systemeigenschaft '-Dlogback.debug = true'. – tony19

+0

@ tony19 Danke. Ich habe die Debug-Ausgabe aktiviert und die Debug-Ausgabe mit mvn test gesehen. Aber das Servlet zu schlagen, gibt mir weiterhin eine stille Behandlung. Ich fange an zu denken, dass das Problem etwas unglaublich Einfaches und Offensichtliches ist, das ich vollständig vermisst habe. – Aaron

+0

Es sieht so aus, als ob die Logging-Protokollimplementierung nicht von SLF4J übernommen wird. Überprüfen Sie, ob logback.jar in web-app/lib vorhanden ist und dass keine anderen Logging-Implementierungen wie slf4j-jdk14 protokolliert werden. –

Antwort

5

Es klingt als ob Sie die Standard-SLF4J-Implementierung in WebLogic überschreiben müssen. Dazu fügen Sie den folgenden Code in Ihre weblogic.xml Datei:

<wls:container-descriptor> 
     <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> 
</wls:container-descriptor> 

Dies wird die SLF4J Implementierung priorisieren, die Sie mit anderen notwendigen logback Libs zur Verfügung gestellt.

In Bezug auf die Konfigurationsdatei Lage, Sie gehen Ihre logback.xml Datei setzen in Ihrem Domain-Root wollen, die etwas aussehen sollte: „../user_projects/domains/$domain_name“ .

Ich hoffe, das hilft.

+0

Das hat funktioniert. Vielen Dank! – Aaron