不能让tomcat-maven-plugin创建日志文件?

问题描述 投票:8回答:2

我在运行mvn tomcat:run-war target,得到一个目录结构,里面有一个logs目录。但可惜,没有日志。我本想用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

如果有人有任何想法,我将非常感激。

tomcat logging maven-2
2个回答
3
投票

我刚刚经历了一个类似的过程,并不完全成功... ...

首先要注意的是,你需要明确你是要为你的web应用改变日志配置,还是为Tomcat本身改变。请看 Tomcat网站上的日志记录文档 以了解一些细节--特别是。

这意味着可以在以下几个层面配置日志。

  • 全球范围内. 这通常是在 ${catalina.base}conflogging.properties 文件中完成的。该文件由 java.util.logging.config.file System 属性指定,该属性由启动脚本设置。如果它不可读或没有配置,默认使用JRE中的${java.home}liblogging.properties文件。
  • 在Web应用程序中。该文件将是WEB-INFclasseslogging.properties

做完这些工作后,当我将应用程序部署到独立的Tomcat服务器上时,我可以重新配置应用程序的日志记录。然而,我无法让它与Maven Tomcat插件一起工作--然后我发现,有人在Tomcat服务器上提交了 bug MTOMCAT-127 在写这篇文章的时候,这个问题还没有解决,似乎可以描述我所看到的情况。

所以并不完全成功--但我希望一旦MTOMCAT-127的问题有了进展,我可以回来更新这个答案......


0
投票

这并不是真正的tomcat插件bug,发生的情况是如果你选择了tomcat maven插件的java api日志记录,你应该知道有一个maven核心库也使用了java api日志记录,叫做sisu-guice 3.2.3-no_aop.jar(类是com.google.inject.internal.util.Stopwatch)。这个库用虚拟机的默认值(INFO等)实例化了LogManager,但没有用Tomcat需要写日志的类org.apache.juli.ClassLoaderLogManager。这个类有一个属性叫manager,它的类型是class,而不是instance。如果我们要修改它,必须重启虚拟机,但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到你的工作目录,但你必须编辑它,在classpath中添加依赖关系 tomcat-embed-logging-juli-7.0.47.jar和你将保存logging.properties的目录,这已经可以使SystemClassLoader更快地启动它。

© www.soinside.com 2019 - 2024. All rights reserved.