无法让 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 创建日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

tomcat-maven-plugin的使用

tomcat-maven-plugin 插件使用

无法为 xstate 创建子状态

Maven:将生成的 tomcat-maven-plugin 资源放在哪里?

如何为 tomcat-maven-plugin 配置额外的上下文路径?

使用tomcat-maven-plugin自动化部署应用