Регистрация в SolrJetty - как заставить работать собственный форматировщик логов? - PullRequest
1 голос
/ 10 февраля 2012

У меня есть сервер Solr в Linux, работающий под Jetty 6, и я пытаюсь настроить пользовательский форматировщик для ведения журналов 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 и помещаю его в папку lib / ext в jetty.home (я также попытался поместить его непосредственно в 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 &

Так что же я делаю не так, почему он не использует мой пользовательский форматер?

1 Ответ

1 голос
/ 11 февраля 2012

Работает благодаря некоторым полезным советам здесь . Проблема заключалась в том, что регистрация в java настраивается до загрузки пользовательского класса из папок lib или lib / ext, поэтому мне нужно было добавить его в start.jar.

Как я это сделал, я создал новый пакет, который я назвал org.mortbay.start, и добавил к нему свой собственный класс LogFormatter. Eclipse автоматически собрал LogFormatter.class из этого в папке bin / org / mortbay / start. Затем я открыл архив start.jar и добавил в него свой собственный класс, чтобы у меня был файл start.jar / org / mortbay / start / LogFormatter.class. Как только это произошло, я смог установить свой форматер, используя:

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