2

私はTomcat(7.0.37)でLogbackを使用しています。Webアクセス可能なログファイルを書き込むことができるログバックを構成したいのですが、コンソールに書き込むように構成することもできます。コンソールでログメッセージをフォーマットできません。常にデフォルトの形式と例外で返されます。

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

これが私のlogback-access.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name="RootFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>testing</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>testing.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>12</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1MB</maxFileSize>
        </triggeringPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
              <pattern>%d{yyyy-MM-dd HH:mm:ss} %m%n</pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="RootConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-6level- %logger{36}: %msg%n</pattern>
        </encoder>
    </appender>

    <appender-ref ref="RootFileAppender"/>
    <appender-ref ref="RootConsoleAppender"/>
</configuration>

この設定では、次のようにサーバーへのhttpリクエストがあるたびに例外が発生します。

18:08:19,951 |-ERROR in ch.qos.logback.core.ConsoleAppender[RootConsoleAppender] - Appender [RootConsoleAppender] failed to append. java.lang.ClassCastException: ch.qos.logback.access.spi.AccessEvent cannot be cast to ch.qos.logback.classic.spi.ILoggingEvent
    at java.lang.ClassCastException: ch.qos.logback.access.spi.AccessEvent cannot be cast to ch.qos.logback.classic.spi.ILoggingEvent
    at  at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:60)
    at  at ch.qos.logback.core.encoder.LayoutWrappingEncoder.doEncode(LayoutWrappingEncoder.java:134)
    at  at ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:188)
    at  at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:212)
    at  at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:103)
    at  at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88)
    at  at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)
    at  at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:182)
    at  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at  at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at  at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at  at java.lang.Thread.run(Thread.java:722)
4

2 に答える 2

7

Logback-accessはアクセスログ用です。Logback-accessは、logback-classicとは異なる目的を持っています。したがって、ログバックアクセスPatternLayoutEncoder設定ファイルでは、「ch.qos.logback.classic.encoder 」パッケージではなく「ch.qos.logback.access」パッケージから使用する必要があります。

たとえば、次のように記述します。

<appender name="RootConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
  <encoder class="ch.qos.logback.access.PatternLayoutEncoder">
    <pattern>%clientHost %l %user %date "%r" %statusCode %bytesSent</pattern>
  </encoder>
</appender>

logback-accessPatternLayoutで使用可能な変換ワードのリストも参照してください。

于 2013-03-22T11:10:29.147 に答える
2

例外の解決策を探しているときにこのトピックを見つけました

ch.qos.logback.classic.AsyncAppender - Appender failed to append. java.lang.ClassCastException: ch.qos.logback.access.spi.AccessEvent cannot be cast to ch.qos.logback.classic.spi.ILoggingEvent

これは古くから知られている問題のようです。ここで報告されています:https ://github.com/qos-ch/logback/pull/185

ロングストーリーショート

tomcatのデフォルトのアクセスログであるはAsyncAppender機能しません。AccessEvent

于 2015-10-14T12:46:05.493 に答える