Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre  >

Criação de Log do Aplicativo no WebSphere Application Server Community Edition

Usando java.util.logging, Log4j e SLF4j

developerWorks
Ir para a página anteriorPágina 5 de 10 Ir para a próxima página

Opções de documento

Código de amostra


Classificar este tutorial

Ajude-nos a melhorar este conteúdo


Usando o SLF4J no Community Edition

O Simple Logging Facade for Java (SLF4J) serve como uma fachada simples para várias APIs de criação de log, que permite a conexão na implementação desejada no tempo de implementação. O SLF4j não inventa outra estrutura de criação de log, mas permite que o aplicativo use uma API padrão e seja conectado na implementação de criação de log real no tempo de implementação.

O SLF4j suporta vários sistemas de criação de log, tais como, NOP, Simple, Log4j versão 1.2, java.util.logging, JCL e logback. A distribuição SLF4j é fornecida com vários arquivos JAR:

  • slf4j-nop.jar
  • slf4j-simple.jar
  • slf4j-log4j12.jar
  • slf4j-log4j13.jar
  • slf4j-jdk14.jar
  • slf4j-jcl.jar.

Cada um destes arquivos jar é conectado fisicamente no tempo de compilação para usar apenas uma implementação. Todas as ligações fornecidas com o SLF4j dependem do slf4j-api.jar, que deve estar presente no caminho da classe para que a ligação funcione corretamente. Ele também fornece um caminho de migração para aplicativos que usam implementações de criação de log concretas usando módulos de ponte. O Community Edition é fornecido com estas bibliotecas que podem ser usadas em aplicativos:

  • slf4j-api-1.4.3.jar
  • slf4j-log4j12-1.4.3.jar
  • jcl104-over-slf4j-1.4.3.jar

Nesta seção, mostramos o uso do SLF4j das seguintes maneiras.

  1. Configurar o SLF4j para usar a configuração de Log4j do servidor
  2. Configurar o SLF4j usando Log4j no nível do aplicativo

Configurar o SLF4j para usar a configuração de Log4j do servidor

Nesta seção, usamos a API do SLF4j no servlet EMPDemo em vez da API Log4j. No entanto, ele usa a implementação de Log4j configurada no nível do servidor para implementação concreta. A Listagem 15 mostra o código do servlet:


Listagem 15. Esquema Servlet EMPDemo usando a API do SLF4j

Logger logger =  LoggerFactory.getLogger(EMPDemo.class.getName());
Connection con = null;
Statement stmt = null;
		
PrintWriter out = response.getWriter();
		
logger.info("Created the PrintWriter on the Response object");
		
try {
    Context initContext = new InitialContext();
    Context envContext  = (Context)initContext.lookup("java:comp/env");
    logger.info("Got environment context: "+envContext);
    DataSource ds = (DataSource)envContext.lookup("jdbc/DataSource");
    logger.info("Got DataSource: "+ds.toString());
    con = ds.getConnection();
    logger.info("Got Connection: "+con.toString() +"\n");
    stmt = con.createStatement();	
    logger.info("Created the statement: " +stmt);
    ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
    logger.info("Gto the result set: " +rs);
    logger.info("Table EMP after SELECT:");
	
out.println("Your EMP table contains the following entries:<BR>");
		
out.println("<table>");
out.println("<tr>");
out.println("<th>Empno</th>");
out.println("<th>Name</th>");
out.println("<th>Job</th>");
out.println("<th>Manager</th>");
out.println("<th>Salary</th>");
    out.println("<th>Commission</th>");
    out.println("<th>Deptno</th>");
    out.println("</tr>");

    while (rs.next()) {
        String emp = rs.getString("EMPNO");
        String name  = rs.getString("ENAME");
        String job = rs.getString("JOB");
        String mgr = rs.getString("MGR");
        String sal = rs.getString("SAL");
        String comm = rs.getString("COMM");
        String dept = rs.getString("DEPTNO");

        out.println("<tr>");
        out.println("<td>"+emp+"</td>");
        out.println("<td>"+name+"</td>");
        out.println("<td>"+job+"</td>");
        out.println("<td>"+mgr+"</td>");
        out.println("<td>"+sal+"</td>");
        out.println("<td>"+comm+"</td>");
        out.println("<td>"+dept+"</td>");
        out.println("</tr>");
				
        logger.info(emp + "   " + name + "   " +job);
        logger.info("   " + mgr + "   " + dept);
    }
    out.println("</table>");
			
    rs.close();
    stmt.close();
    con.close();
			
        	
    logger.trace("Trace");
   logger.debug("Debug");
   logger.info("Info");
   logger.warn("Warn");
   logger.error("Error");

}
catch(java.lang.Exception e) {
			
        e.printStackTrace();
        logger.error(e.getClass().getName());
        logger.error(e.getMessage());

}

A Listagem 16 mostra as dependências declaradas para o SLF4j no plano de implementação do aplicativo do Community Edition (geronimo-web.xml).


Listagem 16. Função O arquivo geronimo-web.xml com dependências para SLF4j
<dependencies>
        …………
        …………

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.4.3</version>
    <type>jar</type>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.4.3</version>
    <type>jar</type>
    </dependency>
</dependencies>

Siga estas etapas para implementar e executar o aplicativo:

  1. A partir da amostra faça download, descompacte o arquivo ZIP do aplicativo. O arquivo war é Log4j-SLF4j-WEB.war.
  2. Implemente o aplicativo.
    <wasce_home>/bin>deploy --user system –-password manager deploy Log4j-SLF4j-WEB.war
  3. Acesse o servlet EMPDemo em http://localhost:8080/Log4j-SLF4j-WEB/EMPDemo.

A Listagem 17 mostra as mensagens de log que são exibidas no console do servidor:


Listagem 17. Mensagens do console do servidor
10:25:18,593 WARN  [EMPDemo] Warn
10:25:18,593 ERROR [EMPDemo] Error

Estas mensagens são exibidas porque o nível de log do ConsoleAppender está configurado como WARN no arquivo server-log4j.properties . Portanto, apenas as mensagens de log com o nível de log WARN ou acima são registradas no console. No entanto, é possível ver se todas as mensagens de log estão registradas no arquivo server.log .



Voltar para parte superior


Configurar o SLF4j usando Log4j no nível do aplicativo

Nesta seção, configuramos o SLF4j para usar a Log4j configurada no nível do aplicativo para o servlet EMPDemo. O código do servlet na Listagem 13 não é alterado. No entanto, o aplicativo é fornecido com um arquivo log4j.properties que substitui a configuração de Log4j no nível do servidor. O servlet EMPDemo usa a API do SLF4j para registrar as mensagens. A Listagem 18 mostra o arquivo log4j.properties :


Listagem 18. O arquivo log4j.properties
log4j.logger.com.ibm.sample=debug,applog

log4j.appender.applog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.applog.File=C:/temp/applevellogging/SLF4j/java.log
log4j.appender.applog.layout=org.apache.log4j.PatternLayout

log4j.appender.applog.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n

Este arquivo log4j.properties configura o serviço de Log4j para usar DailyRollingFileAppender para registrar mensagens no arquivo C:/temp/applevellogging/SLF4j/java.log . Ele usa o formato do Community Edition usado para registrar mensagens.

A Listagem 19 mostra a parte relevante do plano de plano de implementação do Community Edition (geronimo-web.xml) para o aplicativo:


Listagem 19. Plano de implementação do aplicativo do Community Edition
<dep:environment>
	…………………
	…………………

        <dependencies>
	…………………
	…………………
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.4.3</version>
                <type>jar</type>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.4.3</version>
                <type>jar</type>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.14</version>
                <type>jar</type>
            </dependency>
        </dependencies>
        <hidden-classes>
  	<filter>org.apache.log4j</filter>
       </hidden-classes>
    </dep:environment>

O plano de implementação declara uma dependência das bibliotecas Log4j e SLF4j e oculta o pacote Log4j do carregador de classe pai. Siga estas etapas para implementar o aplicativo.

  1. Faça download do aplicativo e salve-o em um diretório. O nome do arquivo WAR é Log4j-SLF4j-AppLevel-WEB.war.
  2. Implemente o aplicativo.
    <wasce_home>/bin>deploy –user system –password manager deploy Log4j-SLF4j-AppLevel-WEB.war.
  3. Acesse o servlet EMPDemo em http://localhost:8080/Log4j-SLF4j-WEB/EMPDemo.

É possível ver se não existem mensagens registradas no console do servidor ou no arquivo server.log . No entanto, o aplicativo cria o arquivo C:/temp/applevellogging/SLF4j/java.log e registra a mensagem conforme configurada.



Voltar para parte superior



Ir para a página anteriorPágina 5 de 10 Ir para a próxima página