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 服务器一样?
我有一个 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 服务器一样?