如何让 java.util.logging 发送日志到 Logback?
How to make java.util.logging send logs to Logback?
我正在开发一个使用 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 登录的第 3 方库 - 特别是 freemarker。正如您从以下控制台日志条目中看到的那样,logback 和 j.u.l 都在登录到控制台,但它们没有使用相同的配置(logback 条目使用我们的模式,j.u.l 的不t)
[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 配置,以便我们为整个应用程序提供一个一致的日志记录配置?
您的应用程序需要有以下 jar:
应用程序 -> Freemarker -> java.util.logging -> SLF4J Api:7 月至 slf4j.jar
应用程序 -> SLF4J API:slf4j-api.jar
SLF4J API -> logback: logback-classic.jar and 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
我正在开发一个使用 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 登录的第 3 方库 - 特别是 freemarker。正如您从以下控制台日志条目中看到的那样,logback 和 j.u.l 都在登录到控制台,但它们没有使用相同的配置(logback 条目使用我们的模式,j.u.l 的不t)
[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 配置,以便我们为整个应用程序提供一个一致的日志记录配置?
您的应用程序需要有以下 jar:
应用程序 -> Freemarker -> java.util.logging -> SLF4J Api:7 月至 slf4j.jar
应用程序 -> SLF4J API:slf4j-api.jar
SLF4J API -> logback: logback-classic.jar and 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