Почему мои метки времени файла журнала Log4j не в порядке, и как я фиксирую его?

Иногда происходят странные вещи, и перезагрузка виртуальной машины разрешит их.

Зайдите в диспетчер AVD, выберите свой экземпляр виртуальной машины, затем выберите больше и нажмите «стереть данные». Если это не сработает, просто удалите его и установите заново.

6
задан Michael Myers 25 February 2009 в 17:16
поделиться

5 ответов

Два оператора журнала, происходящие на различных потоках.

(Распараллельте 1), 19.02.2009 14:54:27  429 ИНФОРМАЦИИ [com.catalystwms.tms.services.background.purge. PurgeManager]
(Распараллельте 2), 19.02.2009 14:47:01  288 ОТЛАДОК [com.catalystwms.core.services. ServiceLocator

Я полагаю, что время операторов журнала точно дает время, когда событие имело место, но просто записано не в порядке, потому что поток 2 ожидает для получения блокировки. Я верю обертыванию Вашего appender в org.apache.log4j. AsyncAppender должен устранить проблему.

3
ответ дан 17 December 2019 в 04:52
поделиться

Формат даты разработан, чтобы позволить простому символьно-ориентированному виду заказывать его правильно.

sort server.log | more

Править: Это полезно для использования на существующих файлах журнала (не для конфигурирования log4j).

2
ответ дан 17 December 2019 в 04:52
поделиться

У Вас есть два различных процесса, регистрирующиеся к тому же файлу журнала с прокруткой appender. Log4j не позволяет это. В прошлом я разрешил это в кластеризованном веб-приложении путем добавления имени сервера к файлу журнала: appname-server1.log и appname-server2.log с каждым сервером, настроенным для записи в их собственный журнал.

Это может также быть полезно для разыскивания ошибок, которые характерны для конфигурации одной машины по сравнению с другим.

Все вышеупомянутое также работает, если у Вас есть два различных приложения, пишущие в тот же файл журнала путем именования файлов на основе приложения выполняемыми.

1
ответ дан 17 December 2019 в 04:52
поделиться

В ответ на @andy:
(Распараллельте 1), 19.02.2009 14:54:27  429 ИНФОРМАЦИИ [com.catalystwms.tms.services.background.purge. PurgeManager]
(Распараллельте 2), 19.02.2009 14:47:01  288 ОТЛАДОК [com.catalystwms.core.services. ServiceLocator

то, чему я верю, может происходить, поток 2, создает запись журнала в 14:47:01  288, когда он пытается записать, это должно получить блокировку для списка Регистратора appenders, но другой поток имеет блокировку и занят, делая IO, так распараллельте 2, ожидает. поток 1 создает запись журнала в 14:54:27  429, это пытается получить ту же блокировку и также ожидает. Когда блокировка освобождена, ОС дает ее для поточной обработки 1, и она печатает.

Если это верно, что другой большой проблемой является одна из производительности. Пути выполнения кода могли заблокироваться при входе IO.

0
ответ дан 17 December 2019 в 04:52
поделиться

Вы, вероятно, не сможете зафиксировать его, прежде чем журнал будет записан. Вы могли попытаться изменить log4J для вызова .flush () после каждой записи, но это сделает код намного медленнее, и решение @Chris Nava является более соответствующим.

-1
ответ дан 17 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: