SolrJetty日志记录 – 如何使自定义日志格式化程序工作?

我在Jetty 6上运行的Linux上有一个Solr服务器,我正在尝试为java日志记录设置自定义格式化程序,但我似乎无法识别我的自定义类。 我是Java的新手,所以引用它可能是我如何导出我的类或类似的问题。 注意这几乎是可以在这里找到的相同问题,但是那里的答案没有帮助,因为我有一个公共的无参数构造函数。

我的格式化程序如下所示(如此处所述):

package myapp.solr; import java.text.MessageFormat; import java.util.Date; import java.util.logging.Formatter; import java.util.logging.LogRecord; public class LogFormatter extends Formatter { private static final MessageFormat fmt = new MessageFormat("{0,date,yyyy-MM-dd HH:mm:ss} {1} [{2}] {3}\n"); public LogFormatter() { super(); } @Override public String format(LogRecord record) { Object[] args = new Object[5]; args[0] = new Date(record.getMillis()); args[1] = record.getLevel(); args[2] = record.getLoggerName() == null ? "root" : record.getLoggerName(); args[3] = record.getMessage(); return fmt.format(args); } } 

在我的logging.properties文件中,然后我有以下(以及配置文件路径/模式和旋转限制和计数的属性):

 handlers = java.util.logging.FileHandler java.util.logging.FileHandler.formatter = myapp.solr.LogFormatter 

然后我将我的类导出到myapp.jar并将其放在jetty.home的lib / ext文件夹中(我也尝试将它直接放在lib下,我尝试使用-Djetty.class.path参数指定它的路径)。 但是,当我运行我的solr应用程序时,它仍然使用XmlFormatter。 我能够成功地将其更改为使用SimpleFormatter,而不是我自己的自定义格式化程序。

我还创建了一个测试类,它导入我的LogFormatter,创建一个实例变量并调用format方法并将结果打印到控制台,并且在Eclipse中没有任何问题。

如果有帮助,我用来启动Solr / Jetty的命令是:

 nohup java -DSTOP.PORT=8079 -DSTOP.KEY=secret -Dsolr.solr.home=../solr_home/local -Djava.util.config.file=../solr_home/local/logging.properties -jar start.jar > /var/log/solr/stdout.log 2&>1 & 

我做错了什么,为什么不使用我的自定义格式化程序?

在这里感谢一些有用的建议。 问题是在从lib或lib / ext文件夹加载自定义类之前设置了java日志记录,因此我需要将它添加到start.jar中。

我是如何做到这一点的,我创建了一个自己的新包,我调用了org.mortbay.start并添加了我的自定义LogFormatter类。 Eclipse自动从bin / org / mortbay / start文件夹中构建LogFormatter.class。 然后我打开了start.jar归档并将我的自定义类添加到其中,所以我有start.jar / org / mortbay / start / LogFormatter.class。 一旦那样,我就可以使用以下方法设置格式化程序:

 handlers = java.util.logging.FileHandler java.util.logging.FileHandler.formatter = org.mortbay.start.LogFormatter