我有一个Tomcat(8.5.23)服务器,使用uit进行logback和slf4j,我有
logback.xml
{catalina.base}/conf
tomcat-juli.jar
替换为logback提供的-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)。
我必须遗漏一些东西(文件错误,丢失文件,其他?)
答案 0 :(得分:0)
部分答案:
上面的logback.xml
使用org.apache.juli.logging.ch.qos.logback...
而不是tomcat-juli
中的类(logback-core
)。对我的代码使用的appender使用logback-core类(ch.qos.logback...
)解决了这个问题。
但是它是无法创建的一般Tomcat代码的追加器。为servlet和服务器使用两个不同的logback.xml文件会删除错误消息但我没有得到任何服务器日志......