Log4j ведение журнала в общем файле журнала

StackOverflow https://stackoverflow.com/questions/285081

  •  08-07-2019
  •  | 
  •  

Вопрос

Есть ли способ записать события журнала log4j в файл журнала, который также записывается другими приложениями. Другие приложения могут быть не Java-приложениями. Какие недостатки? Проблемы с блокировкой? Форматирование?

Это было полезно?

Решение

Log4j имеет SocketAppender, который будет отправлять события в службу, которую вы можете реализовать самостоятельно или использовать простую реализацию, связанную с Log4j.

Он также поддерживает syslogd и журнал событий Windows, что может быть полезно при попытке объединить вывод журнала с событиями из не-Java-приложений.

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

Другие советы

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

У меня есть опыт работы со следующими двумя подходами:

<Ол>
  • Используйте базу данных для ведения журнала вместо простого текстового файла - это может быть слишком сложно из-за проблем с производительностью, с другой стороны, очень легко анализировать журналы, создавать отчеты. База данных заботится обо всех проблемах параллелизма.
  • Другой подход заключается в использовании сервера JBoss, который можно использовать для чтения информации журнала из других источников. JBoss может работать в минимальной конфигурации, благодаря чему он очень легкий (время запуска 2 секунды). Подробности можно найти здесь http://docs.jboss.org/process -guide / en / html / logging.html (вход на отдельный сервер). Log4J берет на себя все проблемы блокировки / параллелизма.
  • Если вы не планируете использовать JBoss, вы можете использовать второй подход в качестве основы вашего собственного решения для ведения журналов.

    Я не думаю, что стандартные приложения log4j блокируют или синхронизируют файлы. Без такой блокировки вы, скорее всего, потеряете сообщения журнала или получите их искаженные.

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

    Log4perl имеет синхронизирующий Appender, Log :: Log4perl :: Appender :: Synchronized, который оборачивает Appender и выполняет это, а также, кажется, предоставляет флаг в своем Log :: Log4perl :: Appender :: File, который предотвращает чередование линий. Вы можете посмотреть, что они делают, чтобы увидеть, можно ли их воспроизвести в Java.

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

    Ваша главная задача - блокировка, скорее всего, другими приложениями. Убедитесь, что все приложения не имеют эксклюзивной блокировки файла, и все будет в порядке.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top