如何在Tomcat 7中使用JULI实现应用程序特定的日志记录?

3

我正在Tomcat 7中使用Java系统日志记录,但没有日志语句被写入日志。我已将此文件添加到我的WEB-INF / classes中。日志文件"new-xyz-test"已创建(因此我至少有部分正确的配置),但它是空的 - 没有日志语句打印到其中。

handlers=java.util.logging.ConsoleHandler, org.apache.juli.FileHandler

org.apache.juli.FileHandler.level=ALL
org.apache.juli.FileHandler.directory=${catalina.base}/logs
org.apache.juli.FileHandler.prefix=new-xyz-test-

java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

com.xyz.level=ALL
com.xyz.handlers=org.apache.juli.FileHandler

你在日志语句中使用的是哪个级别? - Paul Vargas
我已经尝试使用FINE、ALL、FINER、INFO等级别,但仍然没有在日志中获取到任何信息。不过你真的很有帮助(也许这会对其他人有所帮助),所以我会将其标记为已解决。我必须假设这是某种与该应用程序特定的异常情况。 - user364902
我希望你把那个答案标记为“有帮助”而不是“已回答”。 - David Bullock
2个回答

7

为了在Web应用程序中配置JULI,您需要在WEB-INF/classes目录下拥有一个名为logging.properties的文件。如果使用默认处理程序,则可能会丢失某些消息。您需要在文件中指定处理程序的前缀。

handlers=1FILE.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers=java.util.logging.ConsoleHandler

1FILE.org.apache.juli.FileHandler.level=FINEST
1FILE.org.apache.juli.FileHandler.directory=/app-logs
1FILE.org.apache.juli.FileHandler.prefix=file-1

java.util.logging.ConsoleHandler.level=FINE
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

com.xyz.level=INFO
com.xyz.handlers=1FILE.org.apache.juli.FileHandler

com.abc.level=INFO
com.abc.handlers=java.util.logging.ConsoleHandler

处理程序前缀(例如1FILE.)以数字开头,然后是任意字符串,以句点(.)结尾。


JVM中的参数

如果您不是从startup.shstartup.bat运行Tomcat,则需要指定:

  1. Tomcat的常规logging.properties的位置(位于Tomcat的conf目录中)
  2. 管理器org.apache.juli.ClassLoaderLogManager。这很重要因为它允许您为每个Web应用程序配置不同的日志选项。默认情况下,JVM进程只能有一个配置文件。

类似于下面的内容(我正在使用eclipse):

-Djava.util.logging.config.file="C:\Users\Paul\workspaces\utils\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

默认情况下,java.util.logging会读取JDK或JRE中包含的文件,例如:

"C:\Software\jdk1.7.0_17\jre\lib\logging.properties"

谢谢回复。我已经使用了这个确切的语法(甚至复制并粘贴了您使用的示例),日志文件被创建,但没有日志条目(日志文件是空白的)。在Tomcat之外,记录工作正常。我不知道是什么阻止了记录。 - user364902
如果不使用正常的启动脚本,关于“-Djava.util.logging.config.file”的部分非常有帮助,谢谢。 - David Bullock

0

你确定你写入了正确的日志记录器,即Logger.getLogger("com.xyz")吗?

我认为当你在logging.properties中编写com.xyz.level=ALL com.xyz.handlers=org.apache.juli.FileHandler时可能出错了,因为实际上你要写入到Logger.getLogger(com.xyz.YourClass.class),这是因为在日志属性文件中应该写入日志记录器名称,而在你的情况下是com.xyz.YourClass


在当前状态下,这更像是一条评论而不是答案。你可以添加一个更详细的例子,告诉原贴作者该做什么,但现在有点太简短了! - Jimbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接