3

任何人都可以举一个pom.xml依赖配置的例子,这将使 OpenEJB 使用 slf4j 日志记录,而不是 JCL(这是它现在使用的,据我所知)。

另请参阅如何配置 OpenEJB 日志记录?

4

6 回答 6

2

我们支持:

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

随意复制现有的 impl 之一并为 JCL 或 SLF4J 更新。如果您也有破解其他事物的冲动,该项目总是会接受新的提交者!

于 2010-11-10T17:50:17.483 回答
2

感谢大卫的指点,这实际上很容易。你只需要实现两个类: - 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 记录器中很好地格式化所有输出:)

于 2011-03-31T10:15:41.573 回答
1

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

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

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

于 2010-11-25T09:44:09.360 回答
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>
于 2010-11-09T12:59:10.670 回答
0

不是 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>
于 2010-11-10T20:00:59.697 回答
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>
于 2014-01-30T13:53:26.903 回答