log4j2 для бензопилы hello world не работает, что я делаю не так?

Я пытаюсь передать основное сообщение журнала hello world, чтобы оно отображалось в бензопиле из log4j2. Мне все равно, использует ли он «Zeroconf» или нет, я просто хочу что-то, что работает. Я знаю, что моя тестовая программа регистрирует сообщения, поскольку они отображаются на консоли, и я знаю, что она находит мой файл конфигурации, потому что я могу изменить формат сообщений, которые выводятся на консоль, но это все, что я знаю.

Мой конфигурационный файл (содержащий различные неудачные догадки):

<?xml version="1.0" encoding="UTF-8"?>
<configuration advertiser="org.apache.logging.log4j.core.net.MulticastDNSAdvertiser">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
    </Console>
    <File name="testFile" fileName="logs/test.log" bufferedIO="false" advertiseURI="file://localhost/home/matt/code/ade/logs/test.log" advertise="true">
      <XMLLayout />
    </File>
    <SocketAppender name="socketTest" host="localhost" immediateFlush="true" port="4560" protocol="TCP" advertiseURI="http://localhost" advertise="true">
      <XMLLayout />
    </SocketAppender>
  </appenders>
  <loggers>
    <root level="TRACE">
      <appender-ref ref="Console"/>
      <appender-ref ref="testFile"/>
      <appender-ref ref="socketTest"/>
    </root>
  </loggers>
</configuration>

Я пробовал различные комбинации: включение jmdns.jar в путь к классам, перезапуск бензопилы в разных точках и разочарование, но ничего не помогло.

Любые идеи?

Изменить: я понял, почему он не может прочитать файлы журнала, которые я сохранял на диск (я не использовал XMLLayout), поэтому я обновил вопрос, чтобы отразить, что теперь мне нужно только заставить работать потоковую передачу.


person teryret    schedule 10.05.2013    source источник


Ответы (1)


«Рекламодатель» использует механизм подключаемого модуля log4j2, поэтому вы должны указать «имя», определенное для рекламодателя в конфигурации, а не полное имя класса.

Механизм рекламы log4j2 в настоящее время поддерживает рекламу FileAppenders и SocketAppenders. Однако Chainsaw поддерживает обнаружение только файловых приложений log4j2, объявленных с помощью PatternLayout. Поддержка XMLLayout появится в ближайшем будущем.

Для использования механизма рекламодателя log4j2 необходимо использовать последнюю версию разработчика Chainsaw. Архив бензопилы и DMG доступны по адресу: http://people.apache.org/~sdeboy/.

Chainsaw обнаружит объявленную конфигурацию файлового приложения и проанализирует (и завершит, если вы получите последнюю сборку разработчика Chainsaw) файл журнала — настройка Chainsaw не требуется.

Обратите внимание: вам нужно использовать PatternLayout, а JMDNS должен находиться в пути к классам приложения, использующего эту конфигурацию приложения.

Вот пример конфигурации Log4j2 -appender-, которая будет рекламировать конфигурацию fileappender:

<?xml version="1.0" encoding="UTF-8"?>
<configuration advertiser="multicastdns">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
        </Console>
        <File name="testFile" fileName="logs/test.log" bufferedIO="false" advertiseURI="file:///localhost/home/matt/code/ade/logs/test.log" advertise="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m%n"/>
        </File>
    </appenders>
    <loggers>
        <root level="TRACE">
            <appender-ref ref="Console"/>
            <appender-ref ref="testFile"/>
        </root>
    </loggers>
</configuration>

После того, как вы запустили приложение, использующее конфигурацию приложения, откройте вкладку «Zeroconf» в Chainsaw.

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

Вы можете нажать «Автоподключение», если хотите всегда запускать Chainsaw с этой конфигурацией, если она доступна.

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

Объявленный URL-адрес, указанный в конфигурации вашего файлового приложения, должен быть доступен по сети для Chainsaw (похоже, вы работаете локально с Chainsaw и вашим файловым приложением, поэтому пути file:/// будут работать нормально — обратите внимание на три косые черты).

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

person Scott    schedule 10.05.2013
comment
Итак, я снял сборку для разработчиков, но я все еще не получаю ни следа, ни рекламы... или, возможно, я не знаю, чего ожидать. Вы ожидаете, что мне придется открывать файл журнала вручную в дополнение к указанию Chainsaw на файл конфигурации log4j? Я пришлю вам подробности по электронной почте. - person teryret; 10.05.2013
comment
Еще раз спасибо за помощь в отладке! - person teryret; 10.05.2013
comment
The log4j2 advertisement mechanism currently supports advertisement of FileAppenders and SocketAppenders. Ааа, это было для меня ключом. Это не работает с RollingFile Appenders. Смотрел на это где-то час. - person HankCa; 14.04.2015
comment
Он должен работать с приложением скользящих файлов — см. конструктор: logging.apache.org/log4j/2.0/log4j-core/apidocs/src-html/org/ - person Scott; 14.04.2015