正如我在标题中提到的,我的slf4j tomcat日志记录配置存在问题。事情是,虽然我可以将catalina.out旋转到不同的文件,如每日appender,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
答案 0 :(得分:2)
Tomcat的政策如下:
它不应该是一个问题,因为没有什么应该打印到 标准输出,因为您正在使用日志包
至于我,我不同意他们因为大多数时候开发人员“DO”将内容记录到控制台作为开发时间调试目的的日志框架appender /处理程序之一(例如,只是为了在IDE控制台上查看日志输出) )。
这是我使用的解决方案......
将您的日志框架设置为 NOT 将任何内容写入dev / staging / prod环境中的标准输出。 这将使catalina.out非常小,仅使用直接标准输出写入的基本信息(选择log4j,logback等写入)。 因为如果你有一些直接的标准输出写入,你需要用记录器替换它们。
正如我上面所说,在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>
指定控制台appender的日志记录级别。
然后在您的专用环境(dev,staging,prod)上为您的jvm启动传递 -Dmy.console.level = OFF 以禁用写入标准输出。 在IDE中使用 -Dmy.console.level = ALL 。
基本上这就是全部。您也可以使用此方法来控制记录器日志级别。