gpt4 book ai didi

java - SolrJetty 日志记录 - 如何让自定义日志格式化程序正常工作?

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:43 30 4
gpt4 key购买 nike

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

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

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,创建一个实例变量并调用格式方法并将结果打印到控制台,并且在 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 &

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

最佳答案

由于一些有用的建议,让它工作起来 here 。问题是 java 日志记录是在从 lib 或 lib/ext 文件夹加载自定义类之前设置的,因此我需要将其添加到 start.jar 中。

我是如何做到这一点的,我创建了一个自己的新包,将其命名为 org.mortbay.start,并向其中添加了我的自定义 LogFormatter 类。 Eclipse 自动根据 bin/org/mortbay/start 文件夹中的 LogFormatter.class 构建 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

关于java - SolrJetty 日志记录 - 如何让自定义日志格式化程序正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221721/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com