2

正如我在标题中提到的,我的 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
4

1 回答 1

3

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>

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

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

基本上这就是全部。您还可以使用这种方法来控制您的记录器日志级别。

于 2014-11-20T19:39:52.557 回答