无法将 SLF4J 日志记录绑定到 Tomcat 服务器中的 logback.xml
Cannot bind SLF4J logging to logback.xml in Tomcat server
我有一个 Tomcat (8.5.23) 服务器,要将 uit 与 logback 和 slf4j 一起使用,我有
- 已安装 logback (1.2.3)
- 已安装 slf4j (1.7.25)
- 在
{catalina.base}/conf
中添加了一个 logback.xml
- 用 logback
提供的替换了 tomcat-juli.jar
- 定义
-Djuli-logback.configurationFile
指向 {catalina.base}/conf/logback.xml
。
Tomcat代码确实是通过logback进行日志记录,并服从配置文件。
我的 servlet 使用 slf4j。我确实看到了日志输出,但它与 logback.xml 文件中定义的任何格式模式都不匹配(它似乎是默认设置)并且不符合级别设置......实际上它的行为就像tomcat 在我添加 -Djuli-logback.configurationFile
.
之前记录
配置有:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<property name="max.retention.days" value="60" />
<appender name="CONSOLE" class="org.apache.juli.logging.ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{20}] : %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE-CATALINA" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/catalina.log</file>
<append>true</append>
<encoder>
<charset>utf-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{40}] : %msg%n</pattern>
</encoder>
<rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/archive/catalina-%d{yyyyMMdd}-%i.log.zip</fileNamePattern>
<maxHistory>${max.retention.days}</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
</appender>
<appender name="FILE-SERVLET" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/servlet.log</file>
<append>true</append>
<encoder>
<charset>utf-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{40} {%thread} %level : %msg%n</pattern>
</encoder>
<rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/archive/servlet-%d{yyyyMMdd}-%i.log.zip</fileNamePattern>
<maxHistory>${max.retention.days}</maxHistory>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
</appender>
<logger name="com.mycompany" level="INFO" additivity="false">
<appender-ref ref="FILE-SERVLET" />
</logger>
<logger name="org.apache.catalina" level="INFO" additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina]" level="INFO" additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/manager]" level="INFO"
additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/host-manager]" level="INFO"
additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
Eclipse 中的控制台有:
2017-11-22 18:28:31.616 INFO {main} [o.a.c.h.Http11NioProtocol] : Starting ProtocolHandler ["http-nio-8080"]
2017-11-22 18:28:31.621 INFO {main} [o.a.c.a.AjpNioProtocol] : Starting ProtocolHandler ["ajp-nio-8009"]
18:28:37.591 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Entering doPost(/OTMXferServlet/OTMXfer): text/xml
18:28:37.599 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Received 1 lines
前两行来自Tomcat,对应定义的模式。
接下来的来自 servlet 中的 slf4j 调用。
servlet.log
文件已创建,但仍为空。
我尝试设置 -Dlogback.configurationFile
但是当我这样做时出现错误
(ch.qos.logback.core.util.IncompatibleClassException).
我一定是遗漏了什么(文件放错地方了,丢失的文件,其他的?)
部分答案:
上面的 logback.xml
使用 类 (org.apache.juli.logging.ch.qos.logback...
),它们在 tomcat-juli
而不是 logback-core
中。将 logback-core 类 (ch.qos.logback...
) 用于我的代码使用的 appender 解决了这个问题。
但是一般的 Tomcat 代码的附加程序无法创建。为 servlet 和服务器使用两个不同的 logback.xml 文件删除了错误消息,但我没有收到任何服务器日志...
我有一个 Tomcat (8.5.23) 服务器,要将 uit 与 logback 和 slf4j 一起使用,我有
- 已安装 logback (1.2.3)
- 已安装 slf4j (1.7.25)
- 在
{catalina.base}/conf
中添加了一个 - 用 logback 提供的替换了
- 定义
-Djuli-logback.configurationFile
指向{catalina.base}/conf/logback.xml
。
logback.xml
tomcat-juli.jar
Tomcat代码确实是通过logback进行日志记录,并服从配置文件。
我的 servlet 使用 slf4j。我确实看到了日志输出,但它与 logback.xml 文件中定义的任何格式模式都不匹配(它似乎是默认设置)并且不符合级别设置......实际上它的行为就像tomcat 在我添加 -Djuli-logback.configurationFile
.
配置有:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<property name="max.retention.days" value="60" />
<appender name="CONSOLE" class="org.apache.juli.logging.ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{20}] : %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE-CATALINA" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/catalina.log</file>
<append>true</append>
<encoder>
<charset>utf-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level {%thread} [%logger{40}] : %msg%n</pattern>
</encoder>
<rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/archive/catalina-%d{yyyyMMdd}-%i.log.zip</fileNamePattern>
<maxHistory>${max.retention.days}</maxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
</appender>
<appender name="FILE-SERVLET" class="org.apache.juli.logging.ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/servlet.log</file>
<append>true</append>
<encoder>
<charset>utf-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{40} {%thread} %level : %msg%n</pattern>
</encoder>
<rollingPolicy class="org.apache.juli.logging.ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${catalina.base}/logs/archive/servlet-%d{yyyyMMdd}-%i.log.zip</fileNamePattern>
<maxHistory>${max.retention.days}</maxHistory>
<maxFileSize>20MB</maxFileSize>
</rollingPolicy>
</appender>
<logger name="com.mycompany" level="INFO" additivity="false">
<appender-ref ref="FILE-SERVLET" />
</logger>
<logger name="org.apache.catalina" level="INFO" additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina]" level="INFO" additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/manager]" level="INFO"
additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[/host-manager]" level="INFO"
additivity="false">
<appender-ref ref="FILE-CATALINA" />
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
Eclipse 中的控制台有:
2017-11-22 18:28:31.616 INFO {main} [o.a.c.h.Http11NioProtocol] : Starting ProtocolHandler ["http-nio-8080"]
2017-11-22 18:28:31.621 INFO {main} [o.a.c.a.AjpNioProtocol] : Starting ProtocolHandler ["ajp-nio-8009"]
18:28:37.591 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Entering doPost(/OTMXferServlet/OTMXfer): text/xml
18:28:37.599 [http-nio-8080-exec-2] DEBUG com.mycompany.otmxfer.OTMXferServlet - Received 1 lines
前两行来自Tomcat,对应定义的模式。 接下来的来自 servlet 中的 slf4j 调用。
servlet.log
文件已创建,但仍为空。
我尝试设置 -Dlogback.configurationFile
但是当我这样做时出现错误
(ch.qos.logback.core.util.IncompatibleClassException).
我一定是遗漏了什么(文件放错地方了,丢失的文件,其他的?)
部分答案:
上面的 logback.xml
使用 类 (org.apache.juli.logging.ch.qos.logback...
),它们在 tomcat-juli
而不是 logback-core
中。将 logback-core 类 (ch.qos.logback...
) 用于我的代码使用的 appender 解决了这个问题。
但是一般的 Tomcat 代码的附加程序无法创建。为 servlet 和服务器使用两个不同的 logback.xml 文件删除了错误消息,但我没有收到任何服务器日志...