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

标签 java logging solr jetty

我在 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/

相关文章:

java - 如何在java中使用正则表达式将数字与字符串分开?

java - 使用 Resteasy 验证请求的正确方法是什么?

Java:如何排除 java.lang 类的隐式导入

java - Persistence.xml 配置不正确

amazon-web-services - AWS 托管 Airflow 不获取日志

R:在记录堆栈跟踪后捕获错误并继续执行(tryCatch 没有可用的回溯)

CakePHP 2.x : Custom Logging

solr - 赋值之前引用的局部变量 'results'

lucene - 在不指定字段名称的情况下查询 Solr

django - 什么是基于模型的搜索?