Java 如何使OpenEJB使用slf4j?

Java 如何使OpenEJB使用slf4j?,java,logging,slf4j,openejb,apache-commons-logging,Java,Logging,Slf4j,Openejb,Apache Commons Logging,谁能举一个pom.xmldependencies配置的例子,让OpenEJB使用slf4j日志记录而不是JCL(据我所知,这就是它现在使用的) 另请参见如果添加API和JCL依赖项,则使用SLF4J API的日志记录将被定向到默认JCL日志 这就是你想要的吗?还是要使用其他后端进行日志记录 <dependencies> <dependency> <groupId>org.slf4j</groupId> <

谁能举一个
pom.xml
dependencies配置的例子,让OpenEJB使用slf4j日志记录而不是JCL(据我所知,这就是它现在使用的)


另请参见

如果添加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>

org.slf4j
slf4j api
1.6.1
org.slf4j
slf4j jcl
1.6.1
我们支持:

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


您可以随意复制一个现有的IMPL并更新JCL或SLF4J。这个项目总是接受新的提交者,如果你有冲动去做其他事情的话

不是专家,但据我所知,你想要的是:

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

org.slf4j

如果您真的想使用JCL桥接器,请使用以下命令:

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

org.slf4j
jcl-over-slf4j
1.6.1

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

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

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

多亏了David的指针,这实际上相当容易。您只需要实现两个类别: -Slf4jLogStreamFactory -Slf4jLogStream

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

以及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中很好地格式化所有输出。

如果您通过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>

org.codehaus.mojo
execmaven插件
1.2.1
你的主要班级在这里
openejb.log.factory
slf4j

您可能希望将maven标记添加到此question@karianna我试过了,但是每个问题最多有5个标签。你每天都会学到一些东西:-)恰恰相反。我需要将所有JCL日志转移到SLF4JC,您能举个例子说明我到底需要更改什么,以及在哪里更改吗?我试图将
openejb.log.factory=org.apache.openejb.util.Log4jLogStreamFactory
添加到
jndi.properties
中,但没有效果:(log4j实现是默认实现,因此显式设置它不会改变任何东西。要让它使用log4j或java.util.logging以外的其他东西,您必须编写一个新的LogStreamFactory并使用该属性进行设置。如果log4j是默认实现,那么为什么我的
log4j.properties
会被忽略?请查看此内容还有一个问题:。我仍然无法理解如何配置OpenEJB日志记录……文档中介绍的方法都不起作用。我使用了
System.setProperty(“OpenEJB.log.factory”,“slf4j”)
-Dopenejb.log.factory=slf4j
。其他值可以在
org.apache.openejb.util.Logger
中看到:
log4j
pax
。太好了!如果你给jira附加了补丁,我们可以签入。
<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>