Tomcat logback.xml - 滚动文件后缺少堆栈跟踪

问题描述 投票:0回答:1

我从程序员那里得到java *.war文件,把它放在/tomcat/webapps中。 通过/tomcat/bin/startup.sh启动tomcat。 在 /tomcat/logs/ 中有文件 catalina.out - 在这里我读取了来自 tomcat 和 java 应用程序的所有日志。 我已经在 /tomcat/lib/ 目录中创建了文件 logback.xml 。

<configuration scan="true" debug="true">
<property name="HOME_LOG" value="../logs/catalina.out"/>
       <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>${HOME_LOG}</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                        <fileNamePattern>../../logs/archived/%d{yyyy-MM-dd-HH}_catalina.out.gz</fileNamePattern>
                        <maxHistory>30</maxHistory>
                </rollingPolicy>
                <encoder>
                        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%.5level] %logger{10} - %msg%n</pattern>
                </encoder>
        </appender>




        <root level="info">
                <appender-ref ref="FILE"/>
        </root>

所以我正在测试应用程序,现在有一个错误。我在应用程序中触发了一个错误。 在 catalina.out 中,我收到错误消息和错误堆栈跟踪 - 这就是我想要的。 当文件 catalina.out 滚动一小时后,我再次在应用程序中触发相同的错误。 在 catalina.out - 我只收到一条短消息错误,但没有堆栈跟踪。 重新启动 tomcat 后,它会再次工作,直到文件滚动。

我读到catalina.out是tomcat服务器的控制台输出。所以我将控制台附加程序添加到 logback。结果是我有重复的条目,在第一个文件滚动后,重复项消失,堆栈跟踪显示。第二次填充滚动后没有堆栈跟踪。

<configuration scan="true" debug="true">
<property name="HOME_LOG" value="../logs/catalina.out"/>

<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
                <target>System.err</target>             
                <encoder>
                        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%.5level] %logger{10} - %msg%n</pattern>
                </encoder>
</appender>



       <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>${HOME_LOG}</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                        <fileNamePattern>../../logs/archived/%d{yyyy-MM-dd-HH}_catalina.out.gz</fileNamePattern>
                        <maxHistory>30</maxHistory>
                </rollingPolicy>
                <encoder>
                        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%.5level] %logger{10} - %msg%n</pattern>
                </encoder>
        </appender>




        <root level="info">
                <appender-ref ref="FILE"/>
                <appender-ref ref="STDERR"/>
        </root>

当我将

<property name="HOME_LOG" value="../logs/catalina.out"/>
更改为
<property name="HOME_LOG" value="../logs/mycatalina.log"/>
时,所有堆栈跟踪都会写入 catalina.out,应用程序日志会写入 mycatalina.log,但很难匹配日志条目。

我使用了 logrotate 一段时间,但现在我在一台服务器上有 30 个 tomcat 实例(每个实例都是一个客户端)。还会有更多 一个 tomcat ,一个 catalina.out = 一个 crontab 条目,很难维护。

我想将tomcat的控制台输出、应用程序日志记录在一个文件中并备份它们。 是否可以使用 logback.xml 来做到这一点,或者可以使用 loggin.properties 旋转 catalina.out 吗?

java tomcat logback
1个回答
0
投票

问题解决了。 Logback 删除了 catalina.out 文件并创建了一个新文件。 Tomcat 不断将日志重定向到不再存在的“旧”catalina.out 文件。 我要求开发人员让 java 应用程序支持 stacktrace。现在,在日志轮换之后,来自 stacktrace 的错误仍会写入 catalina.out

© www.soinside.com 2019 - 2024. All rights reserved.