如何配置Tomcat实现日志文件的切割

8
我正在尝试配置Tomcat,一旦达到大小限制,就可以翻转日志文件。我将Tomcat作为Windows服务运行,并将所有标准输出重定向到catalina.log。这是我如何配置logging.properties设置大小限制的方法。但它没有起作用。
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, java.util.logging.ConsoleHandler

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = e:/apache-tomcat/logs/server_111-1001
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.limit = 100000 # size 100kb 
1catalina.org.apache.juli.FileHandler.count = 5


2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = e:/apache-tomcat/logs/server_111-1001
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = e:/apache-tomcat/logs/server_111-1001
3manager.org.apache.juli.FileHandler.prefix = manager.

4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = e:/apache-tomcat/logs/server_111-1001
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

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
#org.apache.catalina.startup.ContextConfig.level = FINE
#org.apache.catalina.startup.HostConfig.level = FINE
#org.apache.catalina.session.ManagerBase.level = FINE
#org.apache.catalina.core.AprLifecycleListener.level=FINE

但是1catalina.org.apache.juli.FileHandler.limit = 100000似乎没有起作用。


你为什么要在Web应用程序中写任何内容到stdout?如果你有任何负载,这将会影响你的性能。难道你不能使用log4j或其他日志库吗? - Olaf
因为当将tomcat作为服务运行时,控制台消息会直接发送到stdout.log文件中。 - Srinivas
有没有办法至少旋转stdout.log? - Srinivas
那些控制台消息是从哪里来的?你的 Web 应用程序中到处都有 System.out.println 吗? - Olaf
是的,开发人员在这方面做得非常糟糕! - Srinivas
2个回答

13

org.apache.juli.FileHandler不支持基于文件大小的轮换,并且没有您尝试设置的limitcount属性(请参阅文档)。相反,您可以使用支持基于大小轮换的标准Java java.util.logging.FileHandler。您应该更改配置中的以下行:

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

.handlers = 1catalina.java.util.logging.FileHandler, java.util.logging.ConsoleHandler

请注意,Java的FileHandler的配置略有不同于Tomcat的FileHandler

1catalina.java.util.logging.FileHandler.level = FINEST
1catalina.java.util.logging.FileHandler.pattern = <your log dir>/catalina%g.log
1catalina.java.util.logging.FileHandler.limit = 100000
1catalina.java.util.logging.FileHandler.count = 5
1catalina.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

然而,我不确定将标准输出重定向到日志记录器写入的文件中是否能够很好地帮助您实现所需的内容。


2
根据官方Tomcat 7文档

公共类FileHandler扩展自java.util.logging.Handler。
该处理程序的实现将日志消息追加到一个名为{prefix}{date}{suffix}的文件中,该文件位于配置目录中。
以下配置属性可用:
- directory - 创建日志文件的目录。如果路径不是绝对路径,则相对于应用程序的当前工作目录。Apache Tomcat配置文件通常为此属性指定绝对路径${catalina.base}/logs。默认值:logs - rotatable - 如果为true,则在午夜过后第一次写入时旋转日志文件,并且文件名将为{prefix}{date}{suffix},其中日期为yyyy-MM-dd。如果为false,则不会旋转文件,并且文件名将为{prefix}{suffix}。默认值:true - prefix - 日志文件名的前导部分。默认值:juli。 - suffix - 日志文件名的尾部部分。默认值:.log - bufferSize - 配置缓冲区。值0使用系统默认缓冲区(通常使用8K缓冲区)。值<0会在每次日志写入时强制刷新写入器。值>0使用具有定义值的BufferedOutputStream,但请注意,系统默认缓冲区也将应用。默认值:-1 - encoding - 日志文件使用的字符集。默认值:空字符串,表示使用系统默认字符集。 - level - 此处理程序的级别阈值。有关可能级别,请参见java.util.logging.Level类。默认值:ALL - filter - 此处理程序的java.util.logging.Filter实现类名称。默认值:未设置 - formatter - 此处理程序的java.util.logging.Formatter实现类名称。默认值:java.util.logging.SimpleFormatter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接