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>