Felix Scr 更改日志级别

Posted

技术标签:

【中文标题】Felix Scr 更改日志级别【英文标题】:Felix Scr change log levels 【发布时间】:2019-01-27 13:45:39 【问题描述】:

我正在使用带有 Felix SCR 的 Apache ServiceMix 7.0.1。启动时,我的一些 OSGI 组件处于禁用/不满意状态。为了获得有关组件生命周期的一些额外日志,我查看了更改 scr 的日志级别并找到了这篇文章 - http://felix.apache.org/documentation/subprojects/apache-felix-service-component-runtime.html 但我不清楚在 ServiceMix 中设置 ds.loglevel 属性的位置。我尝试在 config.properties 中设置相同的值,并通过 -D 选项作为启动参数传递,但它没有导致任何额外的日志记录。

您能告诉我如何排除故障组件的问题吗? 谢谢。

【问题讨论】:

【参考方案1】:

据我所知 scr 正在使用 OSGi 日志服务。在许多日志配置中,这些日志不会转发到日志后端。

我最近发现 felix 现在提供了一个基于 logback 的新日志解决方案,它也适用于日志服务以及几种类型的 OSGi 事件。所以我建议你尝试使用 felix logback 支持包。

这是一个如何设置的博客: http://liquid-reality.de/2018/08/07/logging-osgi.html

编辑:博客文本如下,格式稍差,链接似乎已失效,因为它已从 blog.liquid-reality.de 移出。

在相当长的一段时间内,登录 OSGi 似乎是一件神秘的事情。在 logback 网站仍然有 this explanation by Ekke 这是 2008 年肯定不错,但在 2018 年人们不接受创建自己的 记录桥梁,使用片段添加配置并调整启动 级别。

幸运的是,这一切都得到了很大改善。 Apache Karaf 使用 pax-logging 现在还有felix logback support bundle。在这个 文章我将专注于后者,因为它易于设置并且具有 一些不错的功能。

示例代码

我在OSGi DS hello world example 中添加了 felix logback 支持,因为日志记录是任何专业人士的核心方面 发展。

有关如何构建和运行它的说明,请参阅示例中的自述文件。

日志前端

Logback + Felix logback 支持广泛的 日志记录前端(slf4j、jul、log4j、logback、公共日志记录、OSGi 日志服务)。对于您自己的代码,我建议使用 slf4j API。它 依赖非常小,提供了很多功能。

在编译时您只需要 slf4j API。

<dependency>
   <groupId>org.slf4j</groupId>  
   <artifactId>slf4j-api</artifactId>
   <version>1.7.25</version>
</dependency> 

你实例化 slf4j 就像在 OSGi 之外一样。所以 也可以用于可以在内部和外部运行的混合代码 OSGi。

class MyClass 
    Logger log = LoggerFactory.getLogger(this.getClass());  

部署

在运行时,您安装下面的包。这些也 包括一些 OSGi 参考使用的 Felix 日志服务 实现。

<dependency>   <groupId>org.slf4j</groupId>  
<artifactId>slf4j-api</artifactId>   <version>1.7.25</version>
</dependency> <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.0</version> </dependency> <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.0</version> </dependency> <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.log</artifactId>
    <version>1.2.0</version> </dependency> <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.logback</artifactId>
    <version>1.0.0</version> </dependency>

安装这些最简单的方法是使用 bndtools bndrun 包装,如示例中 以上。

配置

logback 配置可以由框架提供 财产。 Logback 将自动监视文件的更改和 应用新设置。

-runproperties: logback.configurationFile=file:$./logback.xml 

你可以使用普通的 logback 配置,但是 felix logback 也提供了一些 用于配置 OSGi 特定日志(如捆绑事件)的特殊设置。 请参阅examples in the felix logback docs。

可以在here找到一个示例配置。

【讨论】:

以上是关于Felix Scr 更改日志级别的主要内容,如果未能解决你的问题,请参考以下文章

删除启动消息以更改 Spark 日志级别

Spring Boot 2.0 在yml中更改日志级别到底怎么写?

如何更改船长 - 日志级别

如何使用 Log4j 更改包的日志级别?

在简单示例项目中更改 Spring 框架日志级别?

Sparklyr - 在 spark-submit 中更改日志级别