Log4J2未在OSGi环境中设置为logger

时间:2017-07-04 07:02:20

标签: java maven osgi log4j2

我正在使用commons-logging,它应该在OSGi环境中桥接到Log4J2,所以在pom.xml中添加了依赖项,export-package和import-package,如下所示,但是logger没有设置为Log4J2记录仪。没有显示错误但是在调试时我发现它被设置为JDK14Logger。

    <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>2.8.2</version>
        </dependency>

        <Export-Package>
            org.apache.logging.log4j.*,
            org.apache.commons.logging.*
        </Export-Package>
        <Import-Package>
            !org.apache.logging.log4j.*,
            !org.apache.commons.logging.*,
            *;resolution:=optional
        </Import-Package>

[UPDATE]

从log4j用户邮件列表中我可以看出,由于ServiceLoader的非模块化特性。我在OSGi环境中检查了ServiceLoader的一些用法,以找到接口的实现,但仍然无法获得如何使其工作。

我也尝试使用pax日志记录,但结果是相同的,除了记录器现在设置为JclLogger

1 个答案:

答案 0 :(得分:0)

如果以上内容在您的用户套装中,则表明这是不正确的。 在您的用户包中,您应该只使用commons日志记录API,而不是更改maven bundle插件的设置。

然后它将为commons日志记录API创建Import-Package语句,但不为log4j创建,这是你想要的。

然后,您应该在运行时安装合适的日志框架。我知道pax-logging可以处理以OSGi兼容方式登录的commons。也许普通的log4j2也可以,但我不确定。