【问题标题】:Logback config in tomcattomcat中的logback配置
【发布时间】:2018-05-18 04:25:35
【问题描述】:

我在 Tomcat 7 中运行两个 Web 应用程序。

Tomcat 有一个logback-access.xml,它定义了两个附加程序。

可以看到在启动tomcat的时候被拾取,并且appender config被正确解析了。

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

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

[logger] 没有适用的操作,当前 ElementPath 是 [[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>

【问题讨论】:

    标签: java tomcat logging tomcat7 logback


    【解决方案1】:

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

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

    要在 Tomcat 中使用 logback-access,在下载 logback 发行版后,将文件 logback-core-1.2.3.jarlogback-access-1.2.3.jar 放在 $TOMCAT_HOME/lib/ 目录下,其中 $TOMCAT_HOME 是您安装 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.xml 文件在 WEB-INF/classes 中,但由于某种原因它被忽略了。我想知道是什么原因...
    • 好吧,试着把它贴在这里,改变所有你需要改变的敏感信息,如果有的话
    • 我已经添加了文件。希望对您有所帮助。
    • 所以主要区别是我在logback-access.xml 中有附加程序,而不是在logback.xml 本身。他们必须在那里,因为 logstash appender 具有特定于服务器的配置。
    • 对不起,我之前误读了 logback-access 部分。我已经编辑了答案
    【解决方案2】:

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

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

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

    这样,应用程序将在 tomcat 共享类路径中找到通用的logback.xml,并使用它,就像它被包含在战争中一样。

    【讨论】:

    • 谢谢!这解决了我的问题!
    猜你喜欢
    • 2019-08-01
    • 2015-09-08
    • 2016-06-12
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多