无法将slf4j记录绑定到tomcat服务器中的logback.xml



我有一个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代码确实通过记录登录,并服从配置文件。

我的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>

日食中的控制台具有:

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使用tomcat-juli中而不是logback-core中的类(org.apache.juli.logging.ch.qos.logback...)。使用对接核类(ch.qos.logback...)为Appender我的代码使用解决问题。

,但是无法创建的是一般的tomcat代码的附录。使用两个不同的logback.xml文件,用于servlet和服务器删除错误消息,但我没有任何服务器日志...

最新更新