在 logback 中打印日志来自的归档文件 (jar)

Print archive (jar) the log is coming from in logback

我在 Tomcat 服务器和 Websphere 服务器上的 class 实现之间存在一些差异。在 logback 中有没有办法在每个日志中显示下一个 jar 和版本?所以日志看起来像这样:

DEBUG | 2015-01-22 16:13:49.252 [Default Executor-thread-7] ApplicationName org.apache.jcp.xml.dsig.internal.dom.DOMSignedInfo - Canonicalized SignedInfo: [wss4j.jar 1.6.17]

我现在的模式是这样的:

<pattern>%-5level | %date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %contextName %logger - %message%n</pattern>

我的 POM:

<dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>0.9.30</version>
            <type>jar</type>
            <scope>runtime</scope>
        </dependency>

我建议检查 Java 进程的完整类路径,您可以简单地使用

jinfo [pid]

您将获得大量输出,包括 java.class.path 所有罐子以及它们的顺序

对于大型应用程序服务器(WebSphere 等)来说,这是一个相当普遍的问题,这些应用程序服务器有一些其他版本的库首先出现在类路径中,这可能是您意想不到的

使用堆栈跟踪很容易做到这一点。

使用 Logback 显示每行堆栈跟踪的 jar 文件和版本:

您只需添加 packagingData="true" 作为配置标签的属性。

示例: <configuration packagingData="true"> ... </configuration>

然后你会得到类似的东西:

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]

查看那里的文档:Enabling packaging data in stack traces
注意 : 从1.1.4版本开始,默认情况下禁用打包数据。

James Strachan 的文章 (2008)

引用自 logback documentation here

图案布局

否则你也可以 customize 你的 pattern 与 :

  • %class
  • %文件
  • %行
  • %来电者