Configurando o Log4J no Glassfish ou Sun Java System App Server

Muitas 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 do domain.xml ou via a console
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!

PageRank

 

Comentários fechados devido á spans!

8 Responses to Configurando o Log4J no Glassfish ou Sun Java System App Server

  1. I do not speak your language but thank you!
    Thank you so much! You helped me big time !

  2. 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.

  3. 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?

  4. 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,

  5. 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

  6. 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,

  7. 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

  8. 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,

Acima