domingo, 15 de fevereiro de 2009

Separando o log do JBoss AS por aplicação

Uma dúvida bastante recorrente de usuários do JBoss AS é: Como separar o log do servidor de aplicações por aplicação?

Essa separação é de extrema importância para facilitar a administração e análise do log de servidores, nos quais temos, em uma única instância, várias aplicações.

O procedimento descrito abaixo faz uso do TCLFilter para fazer a separação baseada no contexto da aplicação, e não no category (que não funciona como esperado caso tenhamos, em nosso servidor, múltiplas aplicações com classes compartilhadas).

A configuração é bastante simples e rápida de ser realizada:

Suponha que temos 2 aplicações: app1.ear e app2.ear, nas quais queremos separar os logs em: app1.log e app2.log respectivamente.

Edite o arquivo ${jboss.server.home.dir}/conf/jboss-log4j.xml e coloque as seguintes informações:

<appender name="App1Log" class="org.apache.log4j.FileAppender">
<errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Append" value="false"/>
<param name="File"
value="${jboss.server.home.dir}/log/app1.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
<filter class="org.jboss.logging.filter.TCLFilter">
<param name="AcceptOnMatch" value="true"/>
<param name="DeployURL" value="app1.ear"/>
</filter>
</appender>

<appender name="App2Log" class="org.apache.log4j.FileAppender">
<errorHandler
class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Append" value="false"/>
<param name="File"
value="${jboss.server.home.dir}/log/app2.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
<filter class="org.jboss.logging.filter.TCLFilter">
<param name="AcceptOnMatch" value="true"/>
<param name="DeployURL" value="app2.ear"/>
</filter>
</appender>

...

<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="App1Log"/>
<appender-ref ref="App2Log"/>
</root>


No caso de a aplicação estar empacotada em um arquivo war (o que fará com que o JBoss AS expanda o arquivo na pasta: ${jboss.server.home.dir}/tmp/deploy),
devemos utilizar o valor warname-exp.war para o parâmetro DeployURL.

Ex:

<!-- para arquivo ear: app1.ear -->
<param name="DeployURL" value="app1.ear">

<!-- para arquivo war: app1.war -->
<param name="DeployURL" value="app1-exp.war"/>

e não apenas:
<param name="DeployURL" value="app1.war"/>


Uma outra maneira de se obter esse comportamento está descrita neste post do meu amigo George Gastaldi.

Mais detalhes sobre a configuração de log no JBoss AS podem ser vistos aqui.

Um comentário:

  1. João, não funcionou por aqui, apesar de ter visto em outros tutoriais exatamente o que você descreveu. Tenho 3 aplicativos no JBoss: um ear, um war e um último war explodido. Os tres logs criados são idênticos e com registros até nível DEBUG. Já conferi e reconferi mas nada. Estou usando JBoss 4.2.3.

    ResponderExcluir