1

我正在使用带有 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 

...这行得通,所以我很确定我的罐子没问题。

有谁知道这里发生了什么?我已经尝试了所有我能想到的组合。

谢谢,阿拉斯泰尔

4

2 回答 2

0

阿拉斯泰尔,不确定你是否有过这个工作,但我相信我和你有同样的问题,我得到了它的工作。你可以在这里看到我的问题和答案,但它的要点是:

在将 lib 或 lib/ext 文件夹添加到类路径并加载您的自定义类之前,会加载 java 日志记录。我必须做的是使用与 start.jar 中的主路径相同的包名创建我的自定义类(例如 org.mortbay.start),然后将编译后的 .class 文件添加到该路径中start.jar 直接在我的 logging.properties 中设置以使用 org.mortbay.start.MyCustomFormatter。

于 2012-02-10T22:43:28.113 回答
0

要使自定义格式化程序从配置中工作,它应该是公共的并且具有公共的无参数 cunstructor。由于 java.util.logging.LogManager 尝试通过反射机制初始化此格式化程序,如果失败,它将使用默认的格式化程序。

于 2011-03-02T09:48:35.760 回答