Java 在 Eclipse 中 运行 时,web 应用程序 catalina 日志未写入日志文件

Java web app catalina logs not written to log file when running in Eclipse

我有一个 Java 网络应用程序,我在 Eclipse 中 运行 用于我的开发环境。我使用 logback 记录到自定义文件。问题是某些日志记录语句,特别是那些传统上转到 catalina.out 的语句,不会在我的日志文件中结束。它们确实出现在我的 Eclipse 控制台中,但 没有 在我的自定义 logback 日志文件中。

当我在 tomcat Eclipse 之外 运行 相同的应用程序时(通过 startup.bat),那些 catalina 日志记录语句确实被捕获在 catalina.out 文件中。但是,当 运行ning 在 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>

这个答案解决了我的问题:

显然,如果 运行 通过 Eclipse 在 tomcat 上运行应用程序时,您想要在文件中捕获 catalina 日志,则需要通过 Eclipse tomcat 指定启动配置设置。

我想这在某种程度上是有道理的,因为 catalina 日志可能不是特定于应用程序的,因此可能超出了 logback appender 的范围。但另一方面,它们不应该默认写入日志文件吗,就像在 Eclipse 之外启动 tomcat 服务器一样?