Gastaldi's Blog

Mais um blog sobre Java …

Arquivos de tags: log jboss

Definindo um arquivo de log por aplicação no JBoss

Em muitas instalações de JBoss(es) que encontro por aí, sempre surge uma dúvida (bastante comum): Como fazer com que o JBoss gere um arquivo de log por aplicação ? Na verdade não existe uma receita simples.

A solução que mostro a seguir, utiliza um conceito bastante interessante da API Log4J, que é o uso da interface RepositorySelector (mais informações aqui e neste excelente artigo).

Existe até um chamado no JIRA aberto para que permita a integração de RepositorySelector(s) no JBoss (algo que deve ser incorporado na versão 5.0 do JBoss AS).

Você pode baixar o código fonte alterado aqui.

O chamado descreve a criação de um SAR para permitir que aplicações que possuam o arquivo log4j.properties ou log4j.xml, utilizem-no ao invés de utilizar a estrutura definida no jboss-log4j.xml. No entanto, não queremos modificar nossas aplicações para adaptar configurações de logging. Até porque isto seria um trabalho extremamente tedioso, e propenso a erros (O que garante, por exemplo, que o caminho dos logs a serem gravados não mude em outra máquina ?).

Logo, uma saída seria a de colocar a configuração de log no jboss-log4j.xml.

Tomando como base uma aplicação empacotada como “teste.war”:

1) Configure o log4j para conter o seu appender e a category


<appender name="FILE_teste" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/teste/teste.log"/>
<param name="Append" value="false"/>
<param name="Threshold" value="INFO"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority &#91;Category&#93; Message\n -->
<param name="ConversionPattern" value="%d %-5p &#91;%c&#93; %m%n"/>
</layout>
</appender>

<category name="teste" additivity="false">
<priority value="INFO"/>
<appender-ref ref="FILE_teste"/>
</category>

OBS:O Category DEVE ter o mesmo nome do WAR. Isso porque o código do SAR utiliza o mesmo nome do WAR para buscar a categoria selecionada. A flag additivity significa que não iremos utilizar a configuração do RootLogger.

2) Faça um deploy do SAR (codigo fonte aqui – compile com maven)

Faça o deploy rodando o comando:

mvn clean package jboss:harddeploy

Desta forma o arquivo será automaticamente compilado e jogado para um jboss local.

3) Inicie o JBoss

Você verá a saída da sua aplicação no seu novo appender.