Qui 3 Jan 2008
Configurando o Log4J no Glassfish ou Sun Java System App Server
Publicado por oziel_neto sob Java Open for BusinessMuitas aplicações usam o Log4J e seu empacotamento/inicialização
podem se tornar um problema em servidores que tem múltiplos classloaders
para separar componentes do servidor dos módulos e aplicações.
Dessa forma descobri uma maneira muito simples de configurar o Log4J
na inicialização do Glassfish ou do Sun Java System App Server nas versões 7, 8 e 9
que elimina a necessidade de ter um listener para inicializá-lo e configurar as categorias
bem como empacotar o Log4J em cada módulo ou aplicação.
1 - Faça o Download do Log4J
2 - Copie o log4j-x.jar no diretório $APP_SERVER_HOME/domains/domain1/lib/ext
3 - Insira as propriedades abaixo alterando a seção
administrativa as propriedades da JVM
<jvm-options>
-Dlog4j.configuration=file:${com.sun.aas.instanceRoot}/config/log4j.xml
</jvm-options>
<jvm-options>
-Dlog4j.configuratorClass=org.apache.log4j.xml.DOMConfigurator
</jvm-options>
4 - Crie um arquivo log4j.xml no diretório $APP_SERVER_HOME/domains/domain1/config
com os appenders e as categorias configuradas baseado no modelo abaixo:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE log4j:configuration SYSTEM “log4j.dtd”>
<log4j:configuration xmlns:log4j=”http://jakarta.apache.org/log4j/” debug=”false”>
<appender name=”app” class=”org.apache.log4j.RollingFileAppender”>
<param name=”File” value=”../logs/app.log”/>
<param name=”Append” value=”false”/>
<param name=”MaxFileSize” value=”5000KB”/>
<param name=”MaxBackupIndex” value=”0″/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%d %-5r %-5p [%c] (%t:%M:%L) %m%n”/>
</layout>
</appender>
<category name=”app.package”>
<priority value=”INFO”/>
<appender-ref ref=”app”/>
</category>
</log4j:configuration>
5 - Em cada uma das classes que se deseja ter o uso do Log4J,
defina o Logger assim:
package app.package;
public class MyClass {
private static Logger logger;
static {
try {
logger = Logger.getLogger( MyClass.class );
} catch (Exception e) {
e.printStackTrace( System.err );
}
}
}
Boa sorte!
Comentários fechados devido á spans!
Enviar por e-mail. Hits para esta publicação: 2389.

Fevereiro 1st, 2008 at 12:28
I do not speak your language but thank you!
Thank you so much! You helped me big time !
Fevereiro 4th, 2008 at 12:29
Hi Nellios,
the post http://blog.oziel.com.br/2008/01/03/log4j-glassfish-sun-java-app-server/ in my Blog was writed in Brazilian Portuguese, and I would like to know if it realy help you to setup Log4J in Glassfish.
Thank for your comment, and I promisse to write two versions (Portuguese and English) of my POSTS in the future,
to help more developers in our community.
Best regards.
Fevereiro 16th, 2008 at 13:28
Caro Oziel,
para fazer o que está mostrado no item 5, não é necessário fazer toda aquela configuração no servidor.
A sua idéia é fazer a aplicação funcionar com o Log4J, o próprio Glassfish utilizar o log4J (o que seria ótimo, pois o log padrão é horrível) ou ambos?
Fevereiro 18th, 2008 at 10:06
Olá Rodrigo,
Essa configuração é para as Aplicações usarem o LOG4J sem ter a necessidade de configurá-lo,
e evitar a alteração de pacotes e deploy para alteração de nível de logging,
deixando a configuração a sob a responsabilidade da administração do servidor.
O Glassfish faz uso do java.util.logging e isso não pode ser alterado.
At,
Maio 27th, 2008 at 12:22
Prezado Oziel:
encontro erro de “incompatible types” em:
public final class DadoBusiness {
private static Logger logger;
static {
try {
logger = Logger.getLogger(DadoBusiness.class);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
…
mensagem:
found: java.util.logging.Logger.getLogger
required: java.util.logging.Logger
Se eu coloco DadoBusiness.class.toString não acusa erro, porém não gera o arquivo em
$APP_SERVER_HOME/domains/domain1/logs
Pode me dizer onde estou errando?
Obrigado,
Edson
Maio 28th, 2008 at 08:39
Edson,
esse modelo é para o Log4J, não para Java Logging que você está usando.
Você precisa incorporar o Log4J na sua aplicação e corrigir os imports.
At,
Setembro 2nd, 2008 at 13:02
Olá amigo…
Estou querendo saber se o log4j possibilita pegar atributos das classes e imprimir no log… por exemplo… tenho um metodo para autenticar usuario… como faria pra gerar um log com a saida : usuario X entrou no sistema as aa/aa/aaaa 13:00…. é possível????
Abraços
Rafaell
Setembro 8th, 2008 at 21:20
Boa noite Rafael,
basicamente atributos privados de classes só podem ser lidos através de uma interface pública e da referência do objeto.
Dessa forma, para fazer o que você deseja, seria necessário criar uma classe adaptadora para as categorias que você quer registrar em log com uma interface para passagem de mensagens, objetos e atributos a serem exibidos.
Você pode criar uma classe centralizada de LOG para isso e usar reflection para ler atributos a serem impressos.
Confesso que sua ídeia não é convencional e tal tipo de “auditoria” deveria ser feita em banco de dados para permitir consultar eficientes.
At,