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.

segunda-feira, 9 de fevereiro de 2009

Tradução da Documentação da Implementação de Referência da Especificação Web Beans (JSR-299)

Recentemente, resolvi fazer algo em prol da adoçao de Web Beans (JSR-299) no Brasil: traduzir a documentação da implementação de referência da especificação Web Beans (recentemente renomeada para Java Contexts and Dependency Injection)

Infelizmente, é muito comum pessoas deixarem de utilizar uma tecnologia por falta de documentação em sua língua nativa.

Se essa era sua desculpa para começar a se familiarizar com a especificação que irá revolucionar (ou que já está revolucionando, vide JBoss Seam) a maneira como desenvolvemos aplicações Java para Web, não é mais.

Pretendo terminar esse trabalho em breve, e conto com a ajuda de todos aqueles que queiram "reviZar" a tradução para o português do Brasil.

O trabalho de tradução é árduo e extremamente suscetível a críticas. É muito difícil encontrar traduções para alguns termos específicos da tecnologia, por isso, optei por deixar entre parênteses a versão em inglês, e, em casos extremos, sequer fazer a tradução.

Conforme o feedback da comunidade, poderei mudar essa abordagem.