- Статьи и примеры
- | Логирование
- | Один из способов подключения log4j к j2ee приложению на cервере jboss 4.2
- | Один из способов подключения log4j к j2ee приложению на cервере jboss 4.2 страница 2
Один из способов подключения 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
- ejb
- jboss_log4j
- log4j-lib.jar
- jboss_log4j
- JBossLog4jTest.class
- common
- Log4jServletInit.class
- jboss_log4j
- log4j-web.war
- META-INF
- MANIFEST.MF
- WEB-INF
- classes
- jboss_log4j
- servlet
- JBossLog4jTestServlet.class
- servlet
- jboss_log4j
- web.xml
- log4j.xml
- classes
- META-INF
- META-INF
Теперь, когда с программированием по большому счету все закончено, осталось написать несколько файлов настройки и скрипт для развертывания приложения на сервере.
Я хочу сделать логирование всех своих классов в отдельных файлах — мне так удобнее отлаживать. Если понадобиться логировать группы файлов — я смогу их объединить при помощи настроек файла конфигурации 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