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