【问题标题】:How to make java.util.logging send logs to Logback?如何让 java.util.logging 将日志发送到 Logback?
【发布时间】:2017-05-26 06:40:49
【问题描述】:

我正在开发一个使用 slf4j api 记录日志的应用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...

private static final Logger LOG = LoggerFactory.getLogger(FreemarkerEmailPreviewGenerator.class);

...

LOG.error("Error generating email preview", e);

(上面发布的代码显示正在使用的类和包,但非常标准的东西。)

我们使用 logback 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{HH:mm:ss.SSS}] [%thread] [%-5level %logger{26} - %msg]%n
            </pattern>
        </encoder>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

我们的一些代码使用了使用 java.util.logging 进行日志记录的 3rd 方库 - 特别是 freemarker。从以下控制台日志条目中可以看出,logback 和 j.u.l 都在登录到控制台,但它们没有使用相同的配置(logback 条目使用我们的模式,而 j.u.l 则不使用)

[12:24:38.842] [pool-2-thread-19] [INFO  u.o.n.r.l.s.e.t.TemplateLoaderFromService - Finding template workflow/mail/templates/common/workflow-macros.ftl]
[12:24:38.859] [pool-2-thread-19] [INFO  u.o.n.r.l.s.e.t.TemplateLoaderFromService - Loaded template workflow/mail/templates/common/workflow-macros.ftl as /workflow/mail/templates/common/workflow-macros.ftl from RegistryMailTemplateService.]
11-Jan-2017 12:24:38 freemarker.log.JDK14LoggerFactory$JDK14Logger error
SEVERE:

Expression domainContact is undefined on line 9, column 74 in workflow/mail/templates/common/workflow-macros.ftl.
The problematic instruction:
----------
==> ${domainContact.name} [on line 9, column 72 in workflow/mail/templates/common/workflow-macros.ftl]

是否可以让 j.u.l 日志记录使用 logback 配置,以便我们为整个应用程序拥有一个一致的日志记录配置?

【问题讨论】:

标签: java logback java.util.logging


【解决方案1】:

您的应用程序需要有以下 jar:

应用程序 -> Freemarker -> java.util.logging -> SLF4J Api: jul-to-slf4j.jar

应用程序 -> SLF4J API:slf4j-api.jar

SLF4J API -> logback:logback-classic.jar 和 logback-core.jar

由于您的应用程序已经包含 slf4j-api.jar 和 logback-classic.jar,您可能只需要添加 jul-to-slf4j.jar

如果你使用 maven:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.22</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.8</version>
</dependency>

logback classic 将过渡添加 logback-core 和 slf4j-api

【讨论】:

  • 是的,您的回答与重复问题的链接相结合,帮助我完成了这项工作。我需要 jul-to-slf4j 并使用 SLF4JBridgeHandler.removeHandlersForRootLogger(); 启用网桥;和 SLF4JBridgeHandler.install();
猜你喜欢
  • 2010-10-26
  • 2014-03-13
  • 2016-11-14
  • 2020-04-23
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2018-03-10
相关资源
最近更新 更多