2015-04-18 4 views
1

У меня есть приложение Java EE, упакованное с ejbs и war. Ниже приводится структура EAR:Log4j2.xml расположение файла конфигурации для EAR

myapp.ear 
-lib 
-META-INF 
-ejbjar1.jar 
-ejbjar2.jar 
-mywebapp.war 

мне нужно использовать log4j2, так что я пытался настроить его на первый из web.xml, следуя instructions to initialize Log4j 2 in a web application, но когда я создаю Logger в EJB он бросает :

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

инструкция дается here не так много для меня ясно, но то, что я понимаю, что мне нужно поместить log4j2.xml в общей папке.

Я попытался поместить xml внутри EAR внутри EAR/lib внутри EAR/META-INF, но у меня получился такой же результат. В этом случае я ничего не настроил в web.xml.

Как настроить log4j2 для EAR, чтобы конфигурация была доступна для всех классов (классы для ejb-module, web-module)?

Я использую Weblogic 12C. Раньше я успешно использовал log4j2 в Weblogic 11G, но в этом случае упаковка была файлом WAR.

+0

Путь прямо в корне EAR должен работать. Что вы используете для сборки/упаковки вашего EAR? Затмение? Maven? Муравей? Вы проверили встроенный/упакованный EAR, разархивировав его и проверив, находится ли файл XML в корне EAR? – BalusC

+0

@BalusC привет. Я уже сделал это тестирование, поставив XML-файл в корень уха и проверил его, открыв пакет. –

+0

Просьба пояснить: каково расположение файлов журнала log4j2? Внутри вашего EAR (где?) Или в пути класса веб-сервера? –

ответ

2

Вы можете упаковать файл log4j2.xml в один из ваших ejbjar1.jar или создать новый configonly.jar, если хотите. Затем он должен делиться между вашими модулями ejb и войной. Кроме того, если вы хотите отделить журналы от ejb и war, вы можете настроить два разных файловых приложения и два разных регистратора: один для ejb и один для войны. Вот рабочий пример log4j2.xml с GlassFish v4.1. Обратите внимание на статус = «трассировка» для отслеживания любой проблемы с конфигурацией.

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="trace"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout 
       pattern="%d{yyyy-MMM-dd EEE HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /> 
     </Console> 

     <!-- for GlassFish v4.1 the logs will be in the domains directory --> 
     <RollingFile name="appServerRollingFile" fileName="../app-logs/app-server.log" 
      append="true" 
      filePattern="../app-logs/$${date:yyyy-MMM}/app-server-%d{yyyy-MMM-dd}-%i.log.zip" 
      ignoreExceptions="false">  
      <PatternLayout 
       pattern="%d{yyyy-MMM-dd EEE HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 

     <!-- for GlassFish v4.1 the logs will be in the domains directory --> 
     <RollingFile name="appWebRollingFile" fileName="../app-logs/app-web.log" 
      append="true" 
      filePattern="../app-logs/$${date:yyyy-MMM}/app-web-%d{yyyy-MMM-dd}-%i.log.zip" ignoreExceptions="false"> 
      <PatternLayout 
       pattern="%d{yyyy-MMM-dd EEE HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="20 MB" /> 
      </Policies> 
     </RollingFile> 
    </Appenders> 

    <Loggers> 
     <Root level="TRACE"> 
      <AppenderRef ref="Console" level="TRACE"/> 
     </Root> 
     <Logger name="test.business" level="TRACE" additivity="false"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="appServerRollingFile" /> 
     </Logger> 

     <Logger name="test.web" level="TRACE" additivity="false"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="appWebRollingFile" /> 
     </Logger> 
    </Loggers> 
</Configuration> 
2

Просто, чтобы быть уверенным, позволяет котировка разделы, которые имеют значение из документации вы имели в виду:

Java EE приложений

Java, EE приложение будет состоять из одного или нескольких ВОЙНЫ файлы и возможны некоторые EJB, обычно все они упакованы в файл EAR. Обычно желательно, чтобы имела единую конфигурацию, которая применяется ко всем компонентам в EAR. Классы каротажа обычно помещаются в местоположение, совместно используемое всеми компонентами, и конфигурация также должна быть разделяемой. Обязательно следуйте инструкциям, чтобы инициализировать Log4j 2 в веб-приложении.

От "Using Log4j 2 in Web Applications":

Конфигурация

Log4j позволяет конфигурационный файл будет указан в web.xml с помощью параметра контекста log4jConfiguration. Log4j будет искать конфигурационные файлы по:

  • Если местоположение при условии, что будет искаться в качестве контекста сервлета ресурса. Например, если log4jConfiguration содержит «logging.xml» , тогда Log4j будет искать файл с этим именем в корневом каталоге веб-приложения.
  • Если местоположение не определено, Log4j будет искать для файла, который начинается с «log4j2» в каталоге WEB-INF. Если найдено больше , чем один файл, и если файл, начинающийся с «log4j2-name» , присутствует, где имя - это имя веб-приложения, то оно будет использоваться . В противном случае будет использоваться первый файл.
  • Последовательность поиска «нормальный» с использованием URL-адреса пути и файлов будет использоваться для . Найдите файл конфигурации.

Обратите внимание, что при запуске из EAR, каждый модуль в нем начинает обычно с использованием его собственной изоляции загрузчик классов.

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

Итак, я не уверен, что вы используете, чтобы собрать свой EAR, но проще всего отбросить его в WEB-INF (каждый) вашего веб-модуля (войны), упакованного в ваше приложение EE (EAR).

Если вы используете maven, у вас будут отдельные проекты для ваших индивидуальных EJB и веб-модулей. Таким образом, вы должны быть в состоянии предоставить файл log4j2 в следующих местах:

  • Web Module: SRC/основные/WebAPP/WEB-INF
  • EJB: SRC/основные/ресурсы (которые должны позволить Maven копию это в META-INF в вашей банке).

Чтобы предоставить файл log4j2 как часть вашего EAR (разделяемого модулями), я думаю, что запись в Class-Path должна быть сделана в вашем META-INF/MANIFEST.MF. Вы должны указать каталог или местоположение ресурса ресурса как часть класса. Для предоставления каталога потребуется trailing path separator.

Я не пробовал это только сейчас, но надеюсь, что это даст вам ключ, и вы поправите меня там, где это необходимо.

Также Log4j2 имеет функцию automatically reload on changes и приспосабливается к нему на лету. Для того, чтобы работать в ваших интересах, я настоятельно рекомендую вам предоставить файл Log4j2 как часть пути к серверу, а не встроен глубоко в вашу банку, войну или ухо. Это будет проще найти и изменить.

Смежные вопросы