JCA(资源适配器)日志记录不适用于Weblogic 12.2.1.2

时间:2018-10-10 10:37:52

标签: logging java-ee slf4j weblogic12c jca

我正在尝试解决与从出站资源适配器进行日志记录有关的问题。

它在Weblogic 12.2.1.2上运行,并且是在Oracle J2EE guide之后编写的。

我已经按照Oracle documentation设置了日志记录描述符,并且在部署它时,weblogic在描述符提供的位置(如预期的那样)创建了一个新的空日志文件。

我已经严格遵守指南Writing Messages to the WebLogic Server Log。我尝试了mock JAR slf4j java.util.logging NonCatalogLogger ,因此,所有日志消息都被打印到控制台并进入域日志文件,但进入我配置的日志文件。

有人可以告诉我为什么吗?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

不幸的是,我无法使weblogic正常工作,因此我不得不寻找替代方法。

这是我基于Logback的解决方案。

pom.xml

<properties>
    <logback.version>1.2.3</logback.version> <!-- Depends on slf4j 1.7.25, conflicting with Weblogic 12.2.1.2 -->
    <slf4j.version>1.7.5</slf4j.version> <!-- Shipped with Weblogic 12.2.1.2 -->

    <adapter.config.file>/etc/logback-my-resource-adapter.xml</adapter.config.file>
</properties>

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
    </dependency>
</dependencies>

LoggerHelper.java

package it.sisal.betting.sdg.adapter.sogei.logging;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.util.ContextInitializer;
import org.slf4j.ILoggerFactory;

    public class LoggerHelper {

        static {
            // https://logback.qos.ch/manual/configuration.html

            System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "${adapter.config.file}");
        }

    public static final ILoggerFactory FACTORY = StaticLoggerBinderHack
        .getSingleton()
        .getLoggerFactory()
    ;

    public static LoggerContext CONTEXT = (LoggerContext)FACTORY;

}

MyResourceAdapter.java

public class MyResourceAdapter implements ResourceAdapter, Serializable {

    private static final Logger logger = LoggerHelper
        .FACTORY
        .getLogger(MyResourceAdapter.class)
    ;

    private BootstrapContext context = null;

    @Override
    public void start(BootstrapContext context) 
        throws ResourceAdapterInternalException 
    {            
        if (logger.isInfoEnabled()) {
            logger.info("start(...)");
        } 

        this.context = context;
     }

     // And so on...
}