有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何配置ApacheTomcat以在catalina的时间戳中输出时区。出档了吗?

我试图将ApacheTomcat9配置为在catalina中输出带有时间戳的时区。出文件。现在,我只是使用默认的日志记录。属性配置,此处显示的相关部分:

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

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

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

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8

我尝试使用“java.util.logging.SimpleFormatter”代替“org.apache.juli.OneLineFormatter”,如下所示:

#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.format = "%1$tb %1$td, %1$tY %1$tH:%1$tM:%1$tS %1$tz %2$s%n%4$s: %5$s%n"

我可以看到它使用的是SimpleFormatter,因为时间戳格式确实略有变化。但是,它不会更改为我在“java.util.logging.ConsoleHandler.format”属性中指定的内容

有没有一种方法可以做到这一点而不用切换到使用类似log4j的东西?我的配置缺少什么

ApacheTomcat 9.0.22 OpenJDK 1.8.0_222

编辑:

下面是一些示例,显示Tomcat在启动时的第一行输出。从默认配置“logging.properties”文件(与ApacheTomcat tar.gz分发版一起分发)中,我在启动时获得以下信息:

20-Nov-2019 11:46:45.056 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.22

如果我修改了“conf/logging.properties”文件,将“java.util.logging.ConsoleHandler.formatter”属性更改如下:

#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

我现在明白了:

Nov 20, 2019 11:50:05 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/9.0.22

作为文件中的第一个事件(实际上是两行)。所以它实际上改变了,这告诉我我在正确的地方。现在我想格式化这行

设置format属性时:

#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%d %5p %tz %c{1}:%L:(%t) - %m%n

我在启动时得到以下信息:

Nov 20, 2019 11:56:44 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/9.0.22

它看起来与未设置format属性的日志输出基本相同


共 (1) 个答案

  1. # 1 楼答案

    设置格式是不够的。您还需要明确告诉记录器使用以下格式:

    将此添加到日志中。属性文件:

    java.util.logging.SimpleFormatter.format="%1$tb %1$td, %1$tY %1$tH:%1$tM:%1$tS %1$tz %2$s%n%4$s: %5$s%n"
    

    对于每个记录器,添加以下行:(Catalina记录器上的示例)

    1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
    

    像这样:

    1catalina.org.apache.juli.AsyncFileHandler.level = FINE
    1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
    1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
    1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
    1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
    

    在您的记录器将使用正确的格式化程序之后,您可以使用该格式来满足您的时间戳/时区需要

    别忘了重新启动Tomcat

    如果你还需要什么,请告诉我