logback - 在 Eclipse 中运行时,Java Web 应用程序 catalina 日志未写入日志文件
问题描述
我有一个在 Eclipse 中为我的开发环境运行的 Java Web 应用程序。我使用 logback 记录到自定义文件。问题是某些日志记录语句,特别是那些传统上转到catalina.out的语句,并没有出现在我的日志文件中。它们确实出现在我的 Eclipse 控制台中,但没有出现在我的自定义 logback 日志文件中。
当我在Eclipse之外的tomcat 中运行相同的应用程序时(通过startup.bat),这些 catalina 日志记录语句确实会被捕获到catalina.out文件中。但是在 Eclipse 中运行时不会创建catalina.out,因此这些日志不会持续存在。
这是我的logback-test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- RollingFileAppender that rolls based on size and time -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/mylog.log</file>
<encoder>
<pattern>%date [%thread] %-5level %logger{10} [%file:%line] - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${catalina.base}/logs/mylog.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- each file at most 20MB; keep 10 files worth of history, max total 20GB -->
<maxFileSize>20MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>logback-test %date [%thread] %highlight(%-5level) %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>logback-test %date [%thread] %highlight(%-5level) %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<!-- set logging levels for specific packages -->
<logger name="org.apache.catalina.startup" level="INFO"/>
<!-- set level of the root logger and associate it with both appenders -->
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="STDERR"/>
</root>
</configuration>
解决方案
这个答案解决了我的问题:https ://stackoverflow.com/a/5045247/3368818
显然,如果在通过 Eclipse 在 tomcat 上运行应用程序时,您想在文件中捕获 catalina 日志,则需要通过 Eclipse tomcat启动配置设置进行指定。
我想这在某种程度上是有道理的,因为 catalina 日志可能不是特定于应用程序的,因此可能超出了 logback 附加程序的范围。但另一方面,它们是否应该默认写入日志文件,就像在 Eclipse 之外启动 tomcat 服务器一样?
推荐阅读
- c# - How can I get the Text from a Label inside a ListView?
- c - Using UTF-8 in C compiler
- java - 我可以将 Class 作为枚举的构造函数参数传递,然后将其用作方法中的返回类型吗?
- node.js - How to design different account for users in mongoDB
- javascript - 从服务器中的搜索栏访问值?
- javascript - 如何终止 JavaScript 中的“无限”生成器?
- observable - 如何在 Observable 函数 Angular 8 服务中调用 2 Web API?
- microsoft-graph-api - 邮件发送的 MS Graph API 订阅
- python - Python,NLP - 查找包含给定单词列表的顶级文档
- java - 我在黄瓜中的脚本不适用于 appium 服务器?