我在运行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
如果有人有任何想法,我将非常感激。
我刚刚经历了一个类似的过程,并不完全成功... ...
首先要注意的是,你需要明确你是要为你的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的问题有了进展,我可以回来更新这个答案......
这并不是真正的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更快地启动它。