2016-05-28 10 views
0

Ich baue einen Web-Service mit jax-rs und wollte einiges protokollieren, wenn URLs aufgerufen werden. Ich habe über log4j 2 herausgefunden und beschlossen, es zu benutzen. Ich weiß nicht, warum, aber es funktioniert, wenn ich ein paar Tests machenlog4j2 Schreiben in Datei beim Testen, nicht beim Deployment

Response response = target("user/v1/"+alfred.getPseudo()).request().get(); 
assertTrue(response.getStatus() < 300); 

Dies wird die Log-String in Protokolle setzen/logs.log (Ich liebe logs). Wenn ich jedoch (mit glassfish 4.1.1) deploye, schreibt es kein einzelnes Zeichen in der Datei, wenn ich dieselbe URL anrufe.

Hier ist mein log4j2.xml (befindet sich in src/main/resources):

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="INFO"> 
    <Appenders> 
     <File name="File" fileName="logs/logs.log"> 
      <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/> 
     </File> 
    </Appenders> 
    <Loggers> 
     <Root level="INFO"> 
      <AppenderRef ref="File"/> 
     </Root> 
    </Loggers> 
</Configuration> 

Mein web.xml ist leer:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
</web-app> 

Ich habe die lo4j-api und log4j-Kern, beide 2.5 , in meiner pom.xml.

Schließlich, hier ist der Code:

private final static Logger logger = LogManager.getLogger(MyClass.class); 

, auf dem ich nenne nur logger.info(String) und logger.error(String).

Was mache ich falsch, und was sollte ich tun, um Protokolle bei der Bereitstellung zu erstellen?

Danke.

EDIT: Vielleicht wird dies helfen. Ich hatte vorher

<File name="File" fileName="logs/logs.log" bufferedIO="false"> 

Als ich Prüfung, ich eine Warnung hatte „Hey, du bufferedIO auf false gesetzt, aber die Standardpuffergröße ist 8192, wtf“. Und diese Warnung wurde angezeigt, als ich die URLs während der realen Bereitstellung anrief. Ich denke, das bedeutet, dass meine Konfiguration auch bei der Bereitstellung erkannt wurde.

Antwort

0

Okay, so verstand ich meinen Fehler aus dieser: https://stackoverflow.com/a/8486370/5670024

Ich habe versucht, die Datei in das Verzeichnis der Anwendung zu schreiben. Changed

<File name="File" fileName="logs/logs.log"> 
    <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/> 
</File> 

zu

<File name="File" fileName="c:/logs.log"> 
    <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/> 
</File> 

und es funktioniert!

0

Sie müssen den Ort in web.xml sagen, nehme ich an.

<context-param> <param-name>log4jConfiguration</param-name> <param-value>WEB-INF/classes/log4j2.xml</param-value> </context-param>

Bitte überprüfen Sie die Bereitstellung für den Standort von log4j2.xml und die param-value entsprechend ändern.

Es wird jedoch empfohlen, einen log4j2.xml auf WAR-Ebene zu verwenden. So ist es leicht zu finden und zu ändern.

+0

Danke für die Beantwortung. Unglücklicherweise habe ich die XML-Datei in 'WEB-INF/classes' abgelegt und den Kontextparameter, den Sie in' web gegeben haben, hinzugefügt.xml' hat es nicht gemacht. Es funktioniert nicht mehr mit Test (ich denke, das könnte normal sein), und fügen Sie immer noch keine Zeile in "logs.log" hinzu – Ghalnas

Verwandte Themen