【问题标题】:Tomcat logging catalina.out is continiously increasingTomcat记录catalina.out不断增加
【发布时间】:2012-04-17 21:29:25
【问题描述】:

正如我在标题中提到的,我的 slf4j tomcat 日志记录配置存在问题。问题是,虽然我可以将 catalina.out 旋转到不同的文件,如每日附加程序,但 catalina.out 文件本身继续增长,我不知道为什么。

顺便说一句,我已经使用我的应用程序的日志文件来使用 slf4j logger.info 调试和任何其他功能,但是我仍然需要 catalina.out 才能从控制台即时查看正在发生的事情。这就是为什么我需要同时继续使用 catalina.out 和 myApplication.log 的原因。

这是我在 tomcat_home/conf 下的 tomcat 日志记录属性

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.

4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter


############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler

【问题讨论】:

  • 你问错问题了。正确的问题是为什么首先要向 catalina.out 写入任何内容。当 Tomcat 启动和停止时,该文件应该只看到少数条目。其他任何情况都表明存在问题。
  • 你说得对!我正在努力弄清楚它为什么会这样......

标签: logging tomcat7 slf4j


【解决方案1】:

Tomcat 对此的政策如下:

这应该不是问题,因为不应该打印任何内容 标准输出,因为您使用的是日志记录包

就我而言,我不同意他们的观点,因为大多数时候开发人员“DO”将内容记录到控制台,作为日志框架附加程序/处理程序之一,用于开发时调试目的(例如,只是为了在 IDE 控制台上查看日志输出)。

这是我使用的解决方案...

设置您的日志框架以将任何内容写入您的 dev/staging/prod 环境的标准输出。 这将使 catalina.out 非常小,仅使用直接标准输出写入(反对 log4j、logback 等写入)写入的基本信息。 当然,如果您有一些直接的标准输出写入,则需要用 logger 替换它们。

正如我上面所说,在 IDE(Eclipse、IDEA 或您使用的任何工具)中进行开发时写入标准输出以使这些日志在开发人员的控制台中可见是很有用的。

以下是您可以通过 logback 配置调整所有这些的方法(但可以与 log4j 完美配合,我相信其他日志框架):

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>${my.console.level}</level>
    </filter>
    <encoder>
        <pattern>%d %-5p [%c{0}] %m%n</pattern>
    </encoder>
</appender>

所以我用

<level>${my.console.level}</level>

为控制台附加程序指定日志记录级别。

然后只需传递 -Dmy.console.level=OFF 即可在您的专用环境(dev、staging、prod)上启动 jvm 以禁用写入标准输出。 在 IDE 中使用 -Dmy.console.level=ALL

基本上就是这样。您还可以使用这种方法来控制您的 loggers 日志级别。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2014-03-25
    • 2020-11-16
    • 2023-03-15
    • 2017-01-22
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多