我正在使用带有 SLF4J 和 java 日志记录的 jetty6,并且一直在尝试添加自定义日志格式化程序,但无论我尝试什么,我似乎都无法让它工作。
我有一个格式化程序,像这样:
package mycode.logging;
public class DeadSimpleFormatter extends SimpleFormatter
{
// Nothing here at all - just an empty subclass of SimpleFormatter.
}
我想将此用作我的码头日志记录的默认值,因此我创建了一个 ${jetty.home}/resources/logging.properties 文件:
handlers=java.util.logging.FileHandler
.level=INFO
java.util.logging.FileHandler.pattern=logs/test_%u.%g.log
java.util.logging.FileHandler.limit=90000
java.util.logging.FileHandler.count=20
java.util.logging.FileHandler.formatter=mycode.logging.DeadSimpleFormatter
mycode.level=INFO
我创建了一个 jar 文件 logging.jar,其中包含 DeadSimpleFormatter 类。我把这个 jar 放到 ${jetty.home}/lib/ext 中。
我开始码头:
java -Djava.util.logging.config.file=resources/logging.properties
-jar start.jar etc/jetty-logging.xml etc/jetty.xml
我可以看到正在创建的输出文件。它遵循我的属性文件中定义的限制和计数规则。但它不使用我的格式化程序 - 它恢复为默认的 XmlFormatter。我没有看到 stdout 或 stderr 有任何错误。
如果我更改 logging.properties 文件以设置格式化程序,如下所示:
java.util.logging.FileHandlerformatter=java.util.logging.SimpleFormatter
...然后它工作 - 使用普通的 SimpleFormatter 写出日志文件。所以我相信我的属性没问题,我的 slfj 罐子等都是正确的。只是Jetty不喜欢我的DeadSimpleFormatter。
因为什么都没有 - 从字面上看!- 在 DeadSimpleFormatter 中,我认为这可能是一个类加载问题。我尝试像这样显式添加 jar 文件:
java -Djetty.class.path=/mypathtojettyhome/lib/ext/logging.jar
-Djava.util.logging.config.file=resources/logging.properties -jar start.jar
etc/jetty-logging.xml etc/jetty.xml
......但没有快乐。
我将一个 main 方法放入我的 DeadSimpleFormatter 并检查我是否可以运行 jar:
java -jar lib/ext/logging.jar
...这行得通,所以我很确定我的罐子没问题。
有谁知道这里发生了什么?我已经尝试了所有我能想到的组合。
谢谢,阿拉斯泰尔