Один из способов подключения Log4j к J2EE приложению на cервере JBoss 4.2 Страница 2

Еще один файл будет присутствовать в проекте.
Этот класс отвечает за инициализацию Log4j и загрузку нашего пользовательского файла настроек Log4j.xml

 package jboss_log4j.common;

 import java.net.URL;
 import org.apache.log4j.xml.DOMConfigurator;
 import org.jboss.logging.Logger;

 public class Log4jServletInit {
  private static boolean initialized = false;

  public static synchronized Logger getLogger(Class cl, String xmlPath){
   if( !initialized ){
    URL url = cl.getResource(xmlPath);
    DOMConfigurator.configure(url);
   }
   return Logger.getLogger(cl);
  }	   
 }

Если в проекте все файлы находятся в архиве war(тут log4j-web.war) и файл настроек log4j.xml лежит в этом же архиве, то необходимость во втором параметре(String xmlPath), который указывает путь к файлу настроек Apache Log4j, отпадает. Его следует прописать в файле настроек Log4jServletInit и не использовать каждый раз при инициализации Log4J.

В нашем случае структура файлов следующая:

  • log4j-ear.ear
    • META-INF
      • application.xml
      • MANIFEST.MF
    • log4j-ejb.jar
      • jboss_log4j
        • ejb
          • JBossLog4jTestMDB.class
    • log4j-lib.jar
      • jboss_log4j
        • JBossLog4jTest.class
        • common
          • Log4jServletInit.class
    • log4j-web.war
      • META-INF
        • MANIFEST.MF
      • WEB-INF
        • classes
          • jboss_log4j
            • servlet
              • JBossLog4jTestServlet.class
        • web.xml
        • log4j.xml

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

Я хочу сделать логирование всех своих классов в отдельных файлах — мне так удобнее отлаживать. Если понадобиться логировать группы файлов — я смогу их объединить при помощи настроек файла конфигурации Log4j в любое время. Файл конфигурации Log4j будет иметь такой вид. Наиболее интересные выдержки из него. Весь файл можно скачать вместе с проектом.

 <appender name="JBossLog4jTestServletLog" class="org.apache.log4j.RollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/JBossLog4jTestServlet.log"/>
  <param name="Append" value="true"/>
  <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  <param name="Threshold" value="DEBUG"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
  </layout>
 </appender>
 <appender name="JBossLog4jTestLog" class="org.apache.log4j.RollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/JBossLog4jTest.log"/>
  <param name="Append" value="true"/>
  <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  <param name="Threshold" value="DEBUG"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
  </layout>1.      
 </appender>
 <appender name="JBossLog4jTestMDBLog" class="org.apache.log4j.RollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/JBossLog4jTestMDB.log"/>
  <param name="Append" value="true"/>
  <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  <param name="Threshold" value="DEBUG"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
  </layout>
 </appender>
 <category name="jboss_log4j.servlet.JBossLog4jTestServlet" additivity="true">
  <appender-ref ref="JBossLog4jTestServletLog" />
 </category>
 <category name="jboss_log4j.JBossLog4jTest" additivity="true">
  <appender-ref ref="JBossLog4jTestLog" />
 </category>
 <category name="jboss_log4j.ejb.JBossLog4jTestMDB" additivity="true">
  <appender-ref ref="JBossLog4jTestMDBLog" />
 </category> 

Несложно догадаться что переменная ${jboss.server.log.dir} будет указывать на папку, где храниться лог файлы сервера JBoss. В нашем случае это C:\jboss\server\default\log.

Оставшиеся файлы проекта web.xml и application.xml достаточно стандартные, поэтому если интересует их содержание, Вы сможете найти их в архиве проекта.

Проект собирается в архив EAR с помощью Apache Ant framework. Простой скрипт копирует необходимые файлы во временную директорию, упаковывает в архивы jar и war, а затем собирает выходной архив EAR. Только для проверки и тестирования я замментировал теги для удаления временных папок. Можно посмотреть какие файлы попадают в каждый архив. Кроме того скрипт не переносит конечный архив EAR на сервер JBoss. Эту возможность несложно добавить. При разработке приложения она бывает полезна. Если Вы не хотите изучать Ant скрипты, то можете воспользоваться различными штепселями к Eclipse. Например WTP, Dali, Lomboz

Вот файл настроек Apache Ant. В нем прописаны различны пути к ресурсам проекта и названия архивов.

 test.libs=lib
 ear.temp=ear-temp
 classes.dir=bin
 web.content.dir=WebContent
 ear.content.dir=EarContent
 deploy.war.name=log4j-web.war
 deploy.ejb.name=log4j-ejb.jar
 deploy.lib.name=log4j-lib.jar
 deploy.ear.name=log4j-ear.ear

Страница: