2017-11-22 19 views
0

私はlogbackとSLF4JとUITを使用するために、Tomcatの(8.5.23)サーバーを持って、私が持っているはTomcatサーバーにlogback.xmlするSLF4Jロギングをバインドできません

  • インストールlogback(1.2.3)
  • インストールSLF4J(1.7.25)
  • {catalina.base}/conf
  • logback.xmlがlogback
  • によって提供番目eoneとtomcat-juli.jarはを指すように-Djuli-logback.configurationFileを定義置き換え添加しました。

Tomcatコードは実際にlogbackをログに記録し、設定ファイルに従います。

私のサーブレットはslf4jを使用しています。ログの出力は表示されますが、logback.xmlファイルで定義されているフォーマットパターンと一致しません(デフォルトのようです)。レベル設定に準拠していません...実際、Tomcatのログ記録のように振る舞います私が-Djuli-logback.configurationFileを追加する前に。

configがあります

<?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 

最初の2行はのTomcatからのものであると定義されたパターンに対応します。 次のものはサーブレットのslf4j呼び出しからのものです。

servlet.logファイルが作成されますが、空のままです。

私は-Dlogback.configurationFileを設定しようとしましたが、そうするとエラーが発生します。 (ch.qos.logback.core.util.IncompatibleClassException)。

私は(他の、ファイルの欠落、ファイルの間違った場所?)何かが欠けする必要があります

答えて

0

部分的な答えを:

logback.xmlは、上記tomcat-juliではなくlogback-coreにあるクラス(org.apache.juli.logging.ch.qos.logback...)を使用しています。アペンダのためにlogback-coreクラス(ch.qos.logback...)を使用すると、my codeが問題を解決します。

しかし、作成できない一般的なTomcatコードのアペンダです。サーブレットとサーバーに2つの異なるlogback.xmlファイルを使用すると、エラーメッセージは取り除かれますが、サーバーログは取得されません。

関連する問題