tomcat 中的 Logback 配置

Logback config in tomcat

我 运行 两个 Web 应用程序 Tomcat 7.

Tomcat有一个logback-access.xml,它定义了两个appender。

我可以看到它在启动时被拾取 tomcat,并且 appender 配置被正确解析。

我的问题是,如何让 webapp 使用其中定义的附加程序?

我尝试将 <logger><root> 元素放入 logback-access 文件中,但这会产生错误:

no applicable action for [logger], current ElementPath is [[configuration][logger]]

rootappender-ref.

类似

我尝试将 logback.xml 文件放入我的 war 文件中,包括 WEB-INF/classesWEB-INF,但它似乎没有被拾取。

那么,我该如何正确配置呢?

Tomcat中的logback-access.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <append>true</append>
        <file>${catalina.base}/logs/my=app.log</file>
        <encoder>
            <pattern>combined</pattern>
        </encoder>
    </appender>

    <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:5044</destination>

        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
<!-- cut specific config -->
            </providers>
        </encoder>
    </appender>
</configuration>

WEB-INF/classes中的logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="my.package" level="DEBUG"/>
    <logger name="com.amazonaws" level="INFO"/>
<!-- and several more loggers like this -->

    <root level="DEBUG">
        <appender-ref ref="FILE"/>
    </root>
    <root level="TRACE">
        <appender-ref ref="STASH"/>
    </root>
</configuration>

Logback-access与应用中的Logback无关;

它必须在应用程序服务器级别进行管理,包括以下 jars (docs):

To use logback-access with Tomcat, after downloading the logback distribution, place the files logback-core-1.2.3.jar and logback-access-1.2.3.jar under $TOMCAT_HOME/lib/ directory, where $TOMCAT_HOME is the folder where you have installed Tomcat.

并使用与不包含任何记录器的 Logback 不同的语法配置它:

<configuration>
  <!-- always a good activate OnConsoleStatusListener -->
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />  

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    </rollingPolicy>

    <encoder>
      <pattern>combined</pattern>
    </encoder>
  </appender>

  <appender-ref ref="FILE" />
</configuration>

有用吗?如果有效,请尝试根据您对 FILE 部分的需要进行更改。

对于 STASH 部分,这是一个不同的问题,因为它是 LogStash - 而不是 LogBack - 并且其中可能涉及其他集成问题。

尝试一步一个脚印

如果有人有类似的问题,我就把它留在这里。

首先,您根本不需要 logback-access.xml 或 tomcat 的 server.xml 中的 Valve。在您的应用中使用过滤器记录传入请求。

然后,如果您需要在服务器上而不是在应用程序中配置 appender,请设计一个 logback.xml 并将其放入 tomcat 的 lib 文件夹(通常是 /usr/share/java/tomcat)。您的应用中不需要 logback.xmllogback-common jar 可以在您的 war 中,也可以在 tomcat lib 文件夹中,随您喜欢。

这样,应用程序将在 tomcat 共享类路径中找到通用的 logback.xml,并像包含在 war.

中一样使用它