2017-11-13 5 views
0

Ich benutze Hibernate 5.2.10.Final, log4j 1.2.17 (aus here), Weblogic 12.2.1. Dies ist, wie mein log4j.xml wie folgt aussieht:Log4j + Hibernate 5 + Weblogic 12.2.1

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration PUBLIC 
    "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
     <param name="Target" value="System.out" /> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="[%5p] %d{yyyy-MM-dd HH:mm:ss} [%x] [%C.%M] - %m %n" /> 
     </layout> 
    </appender> 

    <appender name="logFile" class="org.apache.log4j.RollingFileAppender"> 
     <param name="File" value="../logs/mylog.log"/> 
     <param name="MaxFileSize" value="100MB"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" 
       value="[%5p] %d{yyyy-MM-dd HH:mm:ss} - %m %n" /> 
     </layout> 
    </appender> 

    <logger name="interceptorLog" additivity="false"> 
     <level value="INFO" /> 
     <appender-ref ref="logFile" /> 
    </logger> 

    <root> 
     <priority value="ALL" /> 
     <appender-ref ref="logFile"/> 
    </root> 

</log4j:configuration> 

Gerade jetzt, alle meine eigene Protokollierung mylog.log geht - das ist in Ordnung. Wenn einige Hibernate-Ausnahmen auftreten, gehen diese Protokolle zu <weblogic-domain>/servers/AdminServer/MyApplication.log, was ich möchte, ist für sie in die gleiche Datei wie meine Protokolle gehen.

An dieser Stelle habe ich versucht, im Grunde alles: zu log4j2 Migration (nach this), Hibernate Logger/Kategorien meiner log4j.xml hinzufügen, zum Beispiel:

<logger name="org.hibernate"> 
    <level value="ALL" /> 
    <appender-ref ref="logFile"/> 
</logger> 

Keine überhaupt Fortschritt, egal welche Änderungen ich machen es ist so, als ob sie keinen Effekt haben (außer ich mache natürlich einige Fehler). Ich fange an zu glauben, dass Weblogic dahinter steckt, ich denke, die Hibernate-Logs gehen zur Fehlerausgabe und Weblogic leitet sie zu seinen Dateien um, keine Ahnung, warum ich sie nicht dazu zwingen kann, in mylog.log eingeloggt zu sein.

Ich bin hauptsächlich besorgt über die Ausnahmen, ich möchte sie zusammen mit all meinen benutzerdefinierten Logs sehen, nicht irgendwo in Weblogic-Domain-Dateien versteckt.

Antwort

1

Es kann manchmal frustrierend sein, Java EE-Anwendungsserver (insbesondere WLS) zu behandeln, ohne ihren Klassenlademechanismus vollständig zu verstehen. Lange Rede, kurzer Sinn, damit dies mit WLS 12 funktioniert, müssen Sie WebLogic anweisen, org.jboss.logging. * -Pakete (aus jboss-logging; Abhängigkeit für hibernate-core) von Ihren Anwendungs-Bibliotheken mit dem Deployment-Deskriptor (weblogic) zu bevorzugen .xml). Sie können darüber lesen here.

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app 
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app 
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd"> 

<wls:weblogic-version>12.2.1.2.0</wls:weblogic-version> 

<wls:context-root>example</wls:context-root> 

<wls:container-descriptor> 
    <wls:prefer-application-packages> 
     <wls:package-name>org.springframework.*</wls:package-name> 
     <wls:package-name>org.hibernate.*</wls:package-name> 
     <wls:package-name>org.apache.*</wls:package-name> 
     <wls:package-name>javax.validation.*</wls:package-name> 
     <wls:package-name>com.fasterxml.jackson.*</wls:package-name> 
     <wls:package-name>org.slf4j.*</wls:package-name> 
     <wls:package-name>org.jboss.logging.*</wls:package-name> 
    </wls:prefer-application-packages> 
    <wls:prefer-application-resources> 
     <wls:resource-name>org/slf4j/impl/StaticLoggerBinder.class</wls:resource-name> 
    </wls:prefer-application-resources> 
</wls:container-descriptor> 

Die obige Konfiguration verwendet SLF4J als Logging-API und den neuen Log4J (log4j2) als Logging-Backend:

Ein Beispiel, Ihnen zu helfen. Aber selbst wenn Sie Log4J verwenden (beachten Sie, dass ältere Log4j jetzt veraltet ist), sollte dies für Sie tun.

+0

Ich arbeitete bereits mit diesen Prefer-Paketen zu verschiedenen Anlässen, ich benutzte die neueste Guave in meiner App und Weblogic hatte seine eigene alte Version, gab mir auch ziemlich weh. Werde das morgen versuchen, danke. – Shadov

+0

Arbeitete wie ein Zauber, danke! – Shadov

+0

Ich bin zurück zu ähnlichen Problem - heute hatte ich 'javax.ejb.EJBException: EJB-Ausnahme:: java.lang.UnsupportedOperationException: Die Anwendung muss JDBC-Verbindungen liefern 'und es wurde tief in Weblogic-Server-Logs vergraben. Ich nehme an, es liegt daran, dass es sich nicht um eine Winterschlaf-Ausnahme handelt, also ist es dort gelandet. Kann ich es zwingen, log4j zu durchlaufen? Ich habe 'Redirect Weblogic Standard Fehler/Ausgabe in Datei' versucht, aber es hat nicht geholfen. – Shadov

Verwandte Themen