无法让 tomcat-maven-plugin 创建日志文件?
Posted
技术标签:
【中文标题】无法让 tomcat-maven-plugin 创建日志文件?【英文标题】:Can't make tomcat-maven-plugin create a log file? 【发布时间】:2011-11-28 21:20:59 【问题描述】:我正在运行 mvn tomcat:run-war 目标,并获得一个包含日志目录的目录结构。但很可惜,没有日志。我只是将其替换为 log4j 日志记录,但由于各种原因,这已被证明是困难的。
我已尝试显式设置日志文件配置。我的 pom.xml 定义目前看起来像:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<port>8084</port>
<systemProperties>
<java.util.logging.config.file>$basedir/src/main/webapp/WEB-INF/logging.properties</java.util.logging.config.file>
</systemProperties>
</configuration>
<version>1.1</version>
</plugin>
我在启动期间看到正在读取该属性。我的属性文件在下面;我把东西转储到 /tmp 只是为了确保我知道去哪里找。
handlers = 1catalina.org.apache.juli.FileHandler, \
2localhost.org.apache.juli.FileHandler, \
3manager.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 = /tmp/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = /tmp/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = /tmp/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.bufferSize = 16384
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
如果有人有任何想法,我将非常感激。
【问题讨论】:
【参考方案1】:这并不是一个真正的 tomcat 插件错误,如果您为 tomcat maven 插件选择 java api 日志记录,您应该知道有一个也使用 java api 日志记录的 maven 核心库,称为 sisu-guice-3.2。 3-no_aop.jar(类是 com.google.inject.internal.util.Stopwatch)。该库使用VM的默认值(INFO等)实例化LogManager,但不使用Tomcat编写其日志所需的类org.apache.juli.ClassLoaderLogManager。这个类有一个名为 manager 的属性,它是类类型,而不是实例。如果我们想修改它,我们必须重新启动 VM,但是 Maven 库 sisu-guice-3.2.3-no_aop.jar 会再次覆盖 LogManager 和 RootLogger。
关于评论:
mvn tomcat7: run -Djava.util.logging.config.file = src / main / webapp / WEB-INF / classes / logging.properties
这是不正确的,因为该属性将在 LogManager 已被实例化时设置。
一种解决方案是将 mvn.bat 复制到您的工作目录,但您必须对其进行编辑,将依赖项 tomcat-embed-logging-juli-7.0.47.jar 和您将保留的目录添加到类路径中您的 logging.properties 已经可以使用 SystemClassLoader 将更快地启动它。
【讨论】:
【参考方案2】:我刚刚经历了类似的过程,但并不完全成功......
首先要注意的是,如果要更改 Web 应用程序或 Tomcat 本身的日志记录配置,则需要明确。有关详细信息,请参阅logging documentation on the Tomcat website - 特别是:
这意味着可以在以下层配置日志记录:
全球。这通常在 $catalina.base/conf/logging.properties 文件中完成。该文件由启动脚本设置的 java.util.logging.config.file 系统属性指定。如果不可读或未配置,则默认使用 JRE 中的 $java.home/lib/logging.properties 文件。 在 Web 应用程序中。该文件将是 WEB-INF/classes/logging.properties
完成此操作后,我可以在部署到独立 Tomcat 服务器时重新配置应用程序的日志记录。但是我无法让它与 Maven Tomcat 插件一起使用 - 然后我发现有人提交了 bug MTOMCAT-127 在撰写本文时尚未解决,并且似乎描述了我所看到的内容。
所以并不完全成功 - 但我希望一旦 MTOMCAT-127 问题取得进展,我可以回来更新这个答案......
【讨论】:
在此发布三年后,该错误页面列出了直接指定日志记录属性文件的解决方法:mvn tomcat7:run -Djava.util.logging.config.file=src/main/webapp/WEB-INF/classes/logging.properties
以上是关于无法让 tomcat-maven-plugin 创建日志文件?的主要内容,如果未能解决你的问题,请参考以下文章
Maven:将生成的 tomcat-maven-plugin 资源放在哪里?