任何人都可以举一个pom.xml
依赖配置的例子,这将使 OpenEJB 使用 slf4j 日志记录,而不是 JCL(这是它现在使用的,据我所知)。
6 回答
我们支持:
通过将类名设置为系统属性的值,可以插入LogStreamFactory的新实现。openejb.log.factory
随意复制现有的 impl 之一并为 JCL 或 SLF4J 更新。如果您也有破解其他事物的冲动,该项目总是会接受新的提交者!
感谢大卫的指点,这实际上很容易。你只需要实现两个类: - 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 记录器中很好地格式化所有输出:)
这就是我让 OpenEJB 使用外部日志记录的方式:
[...]
@Before
public void before() throws Exception {
System.setProperty("openejb.logger.external", "true");
InitialContext ctx = new InitialContext();
}
[...]
也许可以将此系统属性移动到某个全局资源,例如pom.xml
?
如果添加 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>
不是 Maven 专家,但根据我的理解,你想要这个:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
如果 OpenEJB 不支持 JCL,那么添加该依赖项将毫无意义,因此请使用 JUL 或 Log4j。
您可以在Maven 存储库中找到更多详细信息。
以防万一你真的想使用 JCL 桥,使用这个:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.1</version>
</dependency>
如果你通过 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>