jboss eap 6.1 настраиваемый log4j для server.log

Поэтому я пытался использовать собственный файл log4j.xml в своем приложении для ушей на JBoss EAP 6.1. Я обнаружил, что если я использую файл appender и прямое статическое имя файла, он будет регистрироваться в этом файле, как я ожидаю (в данном случае, используя log4j2.xml в моей войне, но он делает то же самое, если я использую log4j.xml с log4j 1.2):

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="debug">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    </Console>
    <File name="A1" fileName="server.log">
      <PatternLayout pattern="%t %-5p %c{2} - %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <Logger name="com.xxx.yyy" level="debug" additivity="false">
      <AppenderRef ref="A1" />
    </Logger>
  </Loggers>
</Configuration>

Но это заставит его войти в [jboss-eap]/bin/server.log. Я могу поместить переменные подстановки, чтобы указать на файл в каталоге журнала jboss (в случае eap [jboss-eap]/standalone/log/test.log):

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="debug">
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    </Console>
    <File name="A1" fileName="${sys:jboss.server.log.dir}/test.log">
      <PatternLayout pattern="%t %-5p %c{2} - %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <Logger name="com.xxx.yyy" level="debug" additivity="false">
      <AppenderRef ref="A1" />
    </Logger>
  </Loggers>
</Configuration>

и я вижу, что он делает замену для меня:

16:16:28,626 INFO  [stdout] (ServerService Thread Pool -- 71) 2014-10-30 16:16:28,626 
DEBUG Starting FileManager C:\Users\xxxxxx\Apps\jbossdevstudio\runtimes\jboss-
eap\standalone\log/test.log

И вывод будет отображаться в test.log. Но то, что я действительно хочу, это просто войти в стандартный server.log. Если я попробую описанные выше замены, но использую server.log вместо test.log, на самом деле ничего не регистрируется. Другая вещь, которую я попробовал, - это использование консольного приложения, но затем я получаю действительно длинные выходные строки, которые дважды регистрируют метку времени и имеют два индикатора уровня журнала:

16:24:08,038 INFO  [stdout] (http-/0.0.0.0:8080-1) 2014-10-30 16:24:08,036 INFO  
     [http-/0.0.0.0:8080-1] com.xxx.TestServlet (TestServlet.java:25) - This is a test

Когда то, что я действительно хочу, это просто:

2014-10-30 16:24:08,036 INFO  [http-/0.0.0.0:8080-1] com.xxx.TestServlet 
    (TestServlet.java:25) - This is a test

Так что я не уверен, как это сделать. Мы могли бы настроить внутреннюю конфигурацию ведения журнала jboss, но в нашей организации изменение таких вещей на сервере требует нашей команды промежуточного программного обеспечения, и мы бы предпочли просто изменить пользовательский файл log4j.xml, если нам нужно настроить уровень журнала для определенных классов. Мы можем жить с более длинным выводом, если это необходимо, но мы также используем Splunk, и я полагаю, что он запутается на уровне журнала вывода stdout вместо того, что мы фактически регистрировали при попытке отфильтровать журналы по уровню журнала.

Я был бы признателен за любые советы, которые есть у людей.

1 ответ

Решение

Я бы не советовал, чтобы appender записывал тот же файл, что и сервер. Вы можете получить неожиданное поведение. Я также не предлагаю использовать ConsoleAppender как System.out а также System.err завернуты и, как видите, все ваши сообщения указаны на уровне INFO,

Лучший вариант - просто не включать конфигурацию ведения журнала и использовать конфигурацию ведения журнала сервера. Основное преимущество, которое у вас есть, заключается в том, что вам не нужно повторно развертывать приложение или даже перезапускать сервер для большинства изменений. Они могут произойти во время выполнения. Как вы сказали, хотя для вас это может быть боль.

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

Другие вопросы по тегам