Log4j + Hibernate 5 + Weblogic 12.2.1

Sha*_*dov 2 logging hibernate log4j weblogic12c log4j2

我使用的是Hibernate 5.2.10.Final,log4j 1.2.17(从此处开始),Weblogic 12.2.1。这是我的log4j.xml样子:

<?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>
Run Code Online (Sandbox Code Playgroud)

现在,我所有的日志记录都转到了mylog.log-很好。当发生某些Hibernate异常时,这些日志将转到<weblogic-domain>/servers/AdminServer/MyApplication.log,我希望它们与我的日志转到同一文件。

在这一点上我想基本上一切:迁移到log4j2(以下这个),增加休眠记录器/分类我的log4j.xml,例如:

<logger name="org.hibernate">
    <level value="ALL" />
    <appender-ref ref="logFile"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

根本没有进展,无论我进行什么更改,就像它们没有效果一样(除非我当然犯了一些错误)。我开始认为Weblogic是背后的原因,我猜Hibernate日志会进入错误输出,而Weblogic正在将它们重定向到他的文件,不知道为什么我不能强迫他们登录mylog.log

我最担心的是异常,我希望将它们与所有自定义日志一起查看,而不是将其隐藏在Weblogic域文件中的某个位置。

Abh*_*Rai 5

在不完全了解Java EE应用程序服务器的类加载机制的情况下,有时可能会感到沮丧。长话短说,要使其与WLS 12配合使用,您需要指示WebLogic使用部署描述符(weblogic)从应用程序库中更喜欢org.jboss.logging。*软件包(来自jboss-logging;对hibernate-core的依赖)。 .xml)。你可以在这里阅读。

一个可以帮助您的示例:

<?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>
Run Code Online (Sandbox Code Playgroud)

上面的配置使用SLF4J作为日志记录API,并使用新的Log4J(log4j2)作为日志记录后端。但是,即使您立即使用Log4J(请注意,现在已经不赞成使用较旧的log4j),这也应该为您完成。