weblogic下的sl4j/logback

weblogic下的sl4j/logback,weblogic,slf4j,logback,Weblogic,Slf4j,Logback,我正在尝试在Weblogic12下配置sl4j/logback。 我部署了ear文件,其中包含war文件,其中包含WEB-INF\classes\logback.xml 以下是配置: <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %lo

我正在尝试在Weblogic12下配置sl4j/logback。 我部署了ear文件,其中包含war文件,其中包含WEB-INF\classes\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>
我在标准输出中看到的是:

<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>
ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost
INFO: info test
ьрщ 14, 2012 5:09:29 PM .....FrontEndServlet doPost
SEVERE: error test
所以,看起来配置文件没有被拾取。
我做错了什么

问题是-sl4j没有选择logback,而是使用Weblogic的slf4j jdk日志记录。可以使用Weblogic的configWeblogic application.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>
您需要放入首选应用程序包机制的确切包是
org.slf4j
,如下所示:

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

org.slf4j

注意:这个问题已经得到了回答,我想补充一点,您还应该添加
首选应用程序资源

<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>
回答:将一个名为META-INF/weblogic-application.xml的文件添加到您的ear中,该文件包含
首选应用程序包
首选应用程序资源

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

org.slf4j*
org/slf4j/impl/StaticLoggerBinder.class

或者,如果您对slf4j以外的产品有问题,您可以使用

<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>
<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>

真的
而不是

<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>
<prefer-application-packages>
    <package-name>org.slf4j.*</package-name>
</prefer-application-packages>

org.slf4j*

来源:环境:Weblogic 12.2.1
<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>
日志框架:Slf4j和Logback 要求:登录到我选择的文件(每个应用程序)以及Weblogic服务器日志

<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>
在weblogic.xml中使用
不符合要求。在我的测试中,使用一个或另一个标记(不能同时使用这两个标记)将导致提取应用程序logback.xml,并将日志记录到logback.xml中定义的文件。但是,使用logback的ConsolePender的典型标准输出定义不会登录到服务器日志

<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>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
图表有用)Weblogic 12.2.1仅使用Java util日志绑定,无法(在应用程序配置级别)将Weblogic连接到使用您提供的Logback绑定来记录其服务器日志。可能有一些方法可以使用log4j和bridges来实现这一点,但对我来说,这完全是太多的膨胀和配置,无法完成简单的日志任务

<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>
放弃了通过配置来解决这个问题,我决定只编写自己的logback appender,将日志事件转换为JUL日志事件。我用Logback的AppenderBase实现替换了许多Logback示例中的标准STDOUT定义。现在,我可以使用每个应用程序日志记录配置进行日志记录,也可以登录到Weblogic服务器日志

<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>
相关POM相关性:

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

org.slf4j
slf4j api
1.7.25
回写
回归经典
1.2.3
回写
回溯堆芯
1.2.3
weblogic.xml(请注意,Hibernate附带JbossLogging,它将自动桥接到slf4j)

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

真的
真的
YourContextRoot
回写*
org.jboss.logging*
org.slf4j*
org/slf4j/impl/StaticLoggerBinder.class
Logback AppenderBase实现

<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>
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;
    }
}
<?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>
import java.util.logging.Logger;
导入ch.qos.logback.classic.spi.ILoggingEvent;
导入ch.qos.logback.core.AppenderBase;
公共类WeblogicAppender扩展了AppenderBase{
私有最终记录器=Logger.getLogger(WeblogicAppender.class.getName());
ILOGINGEVENT事件=null;
@凌驾
受保护的void append(ILOGINGEVENT事件){
this.event=事件;
logger.log(getJULLevel(),event.getFormattedMessage());
}
private java.util.logging.Level getJULLevel(){
if(this.event==null){
返回java.util.logging.Level.SEVERE;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.ALL){
返回java.util.logging.Level.ALL;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.DEBUG){
返回java.util.logging.Level.FINE;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.ERROR){
返回java.util.logging.Level.SEVERE;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.INFO){
返回java.util.logging.Level.INFO;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.TRACE){
返回java.util.logging.Level.FINEST;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.WARN){
返回java.util.logging.Level.WARNING;
}else if(this.event.getLevel()==ch.qos.logback.classic.Level.OFF){
返回java.util.logging.Level.OFF;
}否则{
返回java.util.logging.Level.INFO;
}
}
}

<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>
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>
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;
    }
}
<?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>

%d{yyyy MM dd HH:MM:ss}[%thread]-5级别%logger:行号:%1-%message%n
yourlog.log
您的日志。%d{yyyy-MM-dd}。%i.log
25MB
60
10GB
%d{yyyy MM dd HH:MM:ss}[%thread]-5级别%logger:行号:%1-%message%n

希望我能为其他人省去一些我在尝试以我想要的方式工作时所经历的痛苦。

当您解释如何以及需要使用哪个文件时,这一点非常清楚。非常感谢。嗨,我能问你把logback.xml文件放在哪里吗?看起来WebLogic12c只是忽略了它。部署描述符配置正确,事实上我可以在控制台级别查看日志,但我需要定义几个文件附加器,无论我将logback.xml文件放在哪里,它似乎都不起作用。不幸的是,将配置放在另一个maven模块中的解决方案不适用于我的情况。有什么建议吗?嗨。xml放在src/main/resources中。一旦你
<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>