下的WebLogic sl4j /的logback(sl4j/logback under weblo

2019-06-24 10:32发布

我想Weblogic12下配置sl4j /的logback。 我耳朵部署文件,其中有战争文件,里面有WEB-INF \类\ logback.xml
下面是配置:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <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>

我的代码登录:

private static final Logger logger = LoggerFactory.getLogger(FrontEndServlet.class);
//......
logger.info("info test");
logger.debug("debug test");
logger.error("error test");

我在非标准输出看到的是:

ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost
INFO: info test
ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost
SEVERE: error test

因此,它看起来像配置文件没有回升。 我究竟做错了什么?

Answer 1:

这个问题在这里详细讨论: https://stagingthinking.wordpress.com/2012/06/02/annoying-slf4j-problem-in-weblogic-server-12c/

你需要把到喜欢的应用程序的程序包机制的确切包org.slf4j ,就像这样:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application>
  <prefer-application-packages>
    <package-name>org.slf4j</package-name>
  </prefer-application-packages>
</weblogic-application>


Answer 2:

注:另外这个问题是已经回答了,我想补充一点,你还应该添加prefer-application-resources

答:一个名为META-INF / weblogic的-application.xml中添加到您的耳朵,同时包含prefer-application-packagesprefer-application-resources

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application
        xmlns="http://xmlns.oracle.com/weblogic/weblogic-application"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.5/weblogic-application.xsd"
        version="6">

    <!-- http://www.torsten-horn.de/techdocs/jee-oracleweblogic.htm -->
    <prefer-application-packages>
        <package-name>org.slf4j.*</package-name>
    </prefer-application-packages>


    <!-- if not using prefer-application-resources you will get a warning like this: -->
    <!-- Class path contains multiple SLF4J bindings -->
    <!-- SLF4J: Found binding in [jar:file:/C:/wls1211/modules/org.slf4j.jdk14_1.6.1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] -->
    <prefer-application-resources>
        <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name>
    </prefer-application-resources>


</weblogic-application>


Answer 3:

问题是 - sl4j未有起色的logback和使用Weblogic的SLF4J-JDK日志来代替。 可以固定Weblogic的配置的weblogic-application.xml中 ,选择喜欢的应用程序,包



Answer 4:

另外或者如果你有不只是SLF4J更多的问题,你可以使用

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

代替

<prefer-application-packages>
    <package-name>org.slf4j.*</package-name>
</prefer-application-packages>

资料来源: 甲骨文



Answer 5:

环境:Weblogic的12.2.1日志框架:SLF4J和的logback要求:登录到我的(每个应用程序)选择的文件以及Weblogic的服务器日志

使用<prefer-application-packages/><prefer-web-inf-classes>在weblogic.xml不满足要求。 在我的测试,使用一个或其他标记(不能同时使用)会导致应用程序logback.xml被拾起,并记录将转到logback.xml定义的文件。 然而,典型的STDOUT确定指标的logback使用的是ConsoleAppender将无法登录到服务器日志。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

去除的weblogic.xml以下

<wls:prefer-application-packages>
    <wls:package-name>org.slf4j.*</wls:package-name>
</wls:prefer-application-packages>

将导致使用捆绑SLF4J结合,这在Weblogic的12.2.1,就是Java的Util记录。 在这种情况下,日志报表会去服务器日志,而不是在应用层面logback.xml文件定义。 在我的研究中,它出现在一个时间中,WebLogic 12的某些版本允许内部SLF4J绑定到Log4j的,但在较小的版本之一已被删除。 这是我的情况; 我没有实现的Log4j通过管理控制台在WebLogic中主要日志框架的选择。 我相当肯定这不会帮助我,但我也想说明,因为几个文件我看了指出,这将是可用的。

大量的研究和战斗配置与weblogic.xml中,POM的配置(排除等),并尝试使用不同的绑定和桥梁后,我无法实现我想要的日志记录配置。 看来,Weblogic的SLF4J绑定到Java实用程序日志记录,是好还是坏。 如果你选择自己的实现SLF4J和绑定的(在我的情况的logback),没有办法,我可以通过配置找到路由到WebLogic Server日志的消息。 只能有一个在SLF4J绑定,尽管许多框架可以被路由到一个结合,(我发现这个图用)的Weblogic 12.2.1只采用Java的util的登录绑定,就没有办法(在应用配置级别)接线的Weblogic使用的logback结合您提供的登录其服务器日志。 可能有一些方式使用log4j的桥梁做到这一点,但对我来说这是完全有太多的膨胀和配置,以实现一个简单的记录任务。

在试图通过配置来克服这个放弃,我决定干脆写我自己的logback附加器进行并行运动的采伐事件到JUL记录事件。 我取代了我很多的logback例可知标准STDOUT定义自己实施的logback的AppenderBase的。 在这一点上,我现在可以登录每个应用程序的日志记录配置使用,也记录到WebLogic Server日志。

相关POM依赖关系:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>

weblogic.xml中(这里注意,Hibernate内置了JbossLogging这将弥补自动SLF4J)

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/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.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/2.0/weblogic-web-app.xsd">
<jsp-descriptor>
    <keepgenerated>true</keepgenerated>
    <debug>true</debug>
</jsp-descriptor>
<context-root>YourContextRoot</context-root>
<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>ch.qos.logback.*</wls:package-name>
        <wls:package-name>org.jboss.logging.*</wls:package-name>
        <wls:package-name>org.slf4j.*</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>

的logback AppenderBase实施

import java.util.logging.Logger;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;

public class WeblogicAppender extends AppenderBase<ILoggingEvent> {

private final Logger logger = Logger.getLogger(WeblogicAppender.class.getName());
ILoggingEvent event = null;

@Override
protected void append(ILoggingEvent event) {
    this.event = event;
    logger.log(getJULLevel(), event.getFormattedMessage());
}

private java.util.logging.Level getJULLevel() {

    if (this.event == null) {
        return java.util.logging.Level.SEVERE;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.ALL) {
        return java.util.logging.Level.ALL;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.DEBUG) {
        return java.util.logging.Level.FINE;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.ERROR) {
        return java.util.logging.Level.SEVERE;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.INFO) {
        return java.util.logging.Level.INFO;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.TRACE) {
        return java.util.logging.Level.FINEST;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.WARN) {
        return java.util.logging.Level.WARNING;
    } else if (this.event.getLevel() == ch.qos.logback.classic.Level.OFF) {
        return java.util.logging.Level.OFF;
    } else {
        return java.util.logging.Level.INFO;
    }
}

}

Logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
<appender name="STDOUT" class="com.your.package.WeblogicAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger: LineNumber:%L - %message%n</pattern>
    </encoder>
</appender>
<appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>yourlog.log
    </file>
    <rollingPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>yourlog.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <maxFileSize>25MB</maxFileSize>
        <maxHistory>60</maxHistory>
        <totalSizeCap>10GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger: LineNumber:%L - %message%n</pattern>
    </encoder>
</appender>

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

希望我能救别人一些痛苦,我通过努力去得到这个工作,我想要的方式。



文章来源: sl4j/logback under weblogic