如何让OpenEJB使用slf4j?

时间:2010-11-09 11:38:20

标签: java logging slf4j openejb apache-commons-logging

任何人都可以给出pom.xml依赖关系配置的示例,这将使OpenEJB使用slf4j日志记录而不是JCL(正如我所理解的那样,这就是它现在使用的。)

另见How to configure OpenEJB logging?

6 个答案:

答案 0 :(得分:2)

我们支持:

可以通过将类名设置为openejb.log.factory系统属性的值来插入LogStreamFactory的新实现。

随意复制现有的一个impl并更新JCL或SLF4J。如果你有冲动其他东西的冲动,该项目总是接受新的提交者!

答案 1 :(得分:2)

感谢David的指点,这实际上非常简单。你只需要实现两个分支: - Slf4jLogStreamFactory - Slf4jLogStream

然后设置你的工厂: System.setProperty(“openejb.log.factory”,“de.glauche.Slf4jLogStreamFactory”);

package de.glauche;

import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.LogStream;
import org.apache.openejb.util.LogStreamFactory;

public class Slf4jLogStreamFactory implements LogStreamFactory {

    @Override
    public LogStream createLogStream(LogCategory logCategory) {
        return new Slf4jLogStream(logCategory);
    }

}

和Slf4jLogStream:

package de.glauche;

import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.LogStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jLogStream implements LogStream {
    private Logger log;

    public Slf4jLogStream(LogCategory logCategory) {
        log = LoggerFactory.getLogger(logCategory.getName());
    }

    @Override
    public boolean isFatalEnabled() {
        return log.isErrorEnabled();
    }

    @Override
    public void fatal(String message) {
        log.error(message);
    }

    @Override
    public void fatal(String message, Throwable t) {
        log.error(message,t);
    }
        ... (overwrite the remaining methods like this)

有了这个,我通过slf4j在我的logback logger中很好地编译了所有输出:)

答案 2 :(得分:1)

这就是我让OpenEJB使用外部日志记录的方式:

[...]
@Before
public void before() throws Exception {
  System.setProperty("openejb.logger.external", "true");
  InitialContext ctx = new InitialContext();
}
[...]

也许可以将此系统属性移动到某些全局资源,例如pom.xml

答案 3 :(得分:0)

如果添加API和JCL依赖项,那么使用SLF4J API的日志记录将定向到默认的JCL日志。

这就是你想要的吗?或者您想使用其他后端进行日志记录吗?

 <dependencies>
   <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jcl</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>

答案 4 :(得分:0)

不是Maven专家,但根据我的理解,你想要这个:

<dependency>
    <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
    <version>1.6.1</version>
</dependency>

如果OpenEJB不支持JCL,那么添加该依赖是没有意义的,所以请使用JUL或Log4j。

您可以在Maven repository找到更多详情。

如果你真的想要使用JCL网桥,请使用:

<dependency>
    <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
    <version>1.6.1</version>
</dependency>

答案 5 :(得分:0)

如果你是通过Maven的exec插件执行的,请尝试:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
       <mainClass>your Mainclass here</mainClass>
       <systemProperties>
          <systemProperty>
             <key>openejb.log.factory</key>
             <value>slf4j</value>
          </systemProperty>
       </systemProperties>
    </configuration>
 </plugin>