web-dev-qa-db-ja.com

Java.util.loggingにログをLogbackに送信させる方法は?

私はslf4japiを使用してログを記録するアプリに取り組んでいます:

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

...

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

...

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

(上記のコードは、使用中のクラスとパッケージを示すために投稿されていますが、かなり標準的なものです。)

次のように構成されたログバックを使用します。

<?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でログを記録するサードパーティライブラリ(特にfreemarker)を利用しています。次のコンソールログエントリからわかるように、logbackとj.u.lの両方がコンソールにログを記録していますが、同じ構成を使用していません(ログバックエントリは私たちのパターンを使用しますが、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ロギングにlogbackconfigを使用させて、アプリ全体に対して単一の一貫したロギング構成を作成することは可能ですか?

10
Nathan Russell

アプリケーションには、次のjarが必要です。

アプリケーション-> Freemarker-> Java.util.logging-> SLF4J Api:jul-to-slf4j.jar

アプリケーション-> SLF4J API:slf4j-api.jar

SLF4J API->ログバック: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を推移的に追加します

9
King Nike