【问题标题】:Unable to make logback work with karaf 3.0.4无法使用 karaf 3.0.4 进行 logback
【发布时间】:2015-08-16 09:21:35
【问题描述】:

我正在尝试让 karaf 3.0.4 使用 logback。在代码中,我尝试以编程方式为 logback 记录器创建 FileAppender。

ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("bingo");

这里的 LoggerFactor 是 SLF4J LoggerFactory。我还没有发布添加文件附加程序的代码。

这会在 karaf 中引发以下异常:

Caused by: java.lang.ClassCastException: org.ops4j.pax.logging.slf4j.Slf4jLogger cannot be cast to ch.qos.logback.classic.Logger
at bingo.concurrent.TaskContextImpl.<init>(TaskContextImpl.java:34)
at bingo.concurrent.TaskExecutorImpl.execute(TaskExecutorImpl.java:83)

我已经解决了已经报告的类似问题: How to make Pax logging to use the loggback config

我已经做了以下事情:

  • 将 pax-logging-logback 作为 startup.properties 的一部分,因此它总是在 karaf 启动时安装。我用的版本是1.8.3。
  • 更改的配置文件 org.ops4j.pax.logging.cfg org.ops4j.pax.logging.logback.config.file=${karaf.home}/etc/logback.xml

这没有帮助。 karaf.log 中没有捕获任何日志。我也尝试手动安装 pax-logging-logback 但这也没有帮助,我得到了相同的结果。

我错过了什么吗?

问候, 马达夫

【问题讨论】:

    标签: logback apache-karaf


    【解决方案1】:

    我已经设法解决了这个问题。不幸的是,karaf 与 pax 日志服务捆绑在一起,该服务包装了自己的 Slf4j 记录器实现,并始终委托给该实现。如果希望使用 logback 作为默认日志实现,不仅用于 karaf 日志,而且用于在 karaf 上运行的应用程序代码中定义自定义 logback 附加程序,那么我们需要执行以下操作:

    有 2 种方法可以使它工作 - 使用 osgi 引导委托或显式地将包添加到 etc/config.properties 中的 org.osgi.framework.system.packages.extra。我们选择后者,因为 karaf 只是一个本地运行时,我们希望在其中快速测试东西,我们不想更改引导委托,因为这需要更改我们在单个包中导入/导出包的方式,这会影响不是 karaf 的高效运行时。

    • 需要删除以下捆绑包: pax-logging-service, lib/bin/karaf-client.jar
    • 在 lib 文件夹中添加以下包(选择您的 karaf 运行时支持的版本) slf4j-api, logback-core, logback-classic, jul-to-slfj, ​​jcl-over-slf4j, osgi-over-slf4j
    • 在 etc/startup.properties - 删除对 pax-logging-service 和 pax-logging-api 的引用
    • 将 etc/config.properties 中所需的包添加到 org.osgi.framework.system.packages.extra 中,确保没有 karaf 抱怨的多余空格
    • 创建一个 logback.xml 并将其添加到 $karaf.home 或 $karaf.home/etc
    • 注释掉 etc/org.ops4j.pax.logging.cfg 中的所有内容
    • 在 etc/system.properties 添加 logback.configurationFile="logback.xml 文件路径"

    就是这样!!我们无法让 org.apache.karaf.log.core 和 org.apache.karaf.log.command 工作,因为我们没有使用任何 karaf 日志控制台命令,所以我们保持原样。

    干杯!! 马达夫

    【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多