• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Struts Cap10 DepuraçãO E Log
 

Struts Cap10 DepuraçãO E Log

on

  • 1,358 views

 

Statistics

Views

Total Views
1,358
Views on SlideShare
1,069
Embed Views
289

Actions

Likes
1
Downloads
0
Comments
0

4 Embeds 289

http://wpjr2.wordpress.com 284
https://wpjr2.wordpress.com 3
http://www.slideshare.net 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Struts Cap10 DepuraçãO E Log Struts Cap10 DepuraçãO E Log Presentation Transcript

  • Capítulo 10 Depurando e Usando Log
  • Esquema
    • Depuração e Log
    • Usando o Jakarta Commons Logging
    • Usando o log4j
    • O Impacto do Desempenho com uso de log4j
    • Usando a Java 1.4 Logging API
  • Depuração e Log
    • Depuração: critério importante para ambientes de testes
      • Necessita de uma política de logging
    • JSP/Servlets: definição de níveis de depuração presentes na especificação
      • ( web.xml )
    • No Struts: a partir da versão 1.1, implementação da interface Jakarta Commons Logging
    <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param>
  • Depuração e Log: JSP String param = getServletConfig(). getInitParameter(“debug”); If (param.equals(“2”)){ System.out.println(“Mensagem debug”); } Web.xml Documento JSP, Servlet <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param>
  • Jakarta Commons Logging (JCL)
    • Ponte entre conexão dos componentes Struts e arcabouços de log, como o Apache log4j e a Java 1.4 Logging API
    • Instalação do pacote Commons Logging
    # uso do SimpleLog org.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog # uso do log4j # Obs: necessita do arquivo log4j.properties org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JCategoryLog
  • Jakarta Commons Logging (JCL)
    • http://commons.apache.org/logging/
    Ponte Apache Commons Logging Log4J Java 1.4 Logging API LogKit SimpleLog NoOptLog commons-logging. properties Loggers do JCL Loggers Compatíveis com JCL Aplicação Web Struts JavaEE Visão Controle Modelo Persistência
  • Jakarta Commons Logging (JCL) # exemplo de uso do SimpleLog org.apache.commons.logging.Log = org.apache.commons.logging.impl.SimpleLog # exemplo de uso do log4j # Obs: necessita do arquivo log4j.properties org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JCategoryLog
  • Jakarta Commons Logging (JCL)
    • Funcionalidade normalmente usada para fins de teste e depuração somente
      • No ambiente de produção, esta deve ser desabilitada
    • Já incluso no Struts 1.1
    • Opções de APIs de logging
      • Commons SimpleLog e Log4J
      • Configurável via commons-logging.properties
        • Disponível em /WEB-INF/classes
  • Usando o Jakarta Commons Logging (JCL)
    • Instância de org.apache.commons.logging.Log via LogFactory.getLog()
    • Métodos: debug(), error(), fatal(), warn()
    Log log = LogFactory.getLog( LoginAction.class ); if (log.isInfoEnabled( )){ // Log do usuário autenticado log.info( &quot;E-mail: &quot; + email ); } StringBuffer buf = new StringBuffer( ); buf.append( &quot;Login Realizado em &quot; ); buf.append( new Date() ); ... buf.append( cliente.getEmail ( ) ); // Log para fins de auditoria log.debug( buf.toString( ) );
  • Usando o log4j
    • Uma das bibliotecas de log mais populares
    • Classe principal: org.apache.log4j.Logger
    • Interface
    • com Jakarta
    • Commons
    • Logging
    • Definição de níveis de log
    • Instalação e configuração: configuração ( log4j.properties )
  • Usando o log4j
    • Permite o envio de mensagens de log para múltiplos destinos
      • Appenders ou anexadores
    • Classes que processam as mensagens
      • log4J user guide
  • Usando o log4j: Propriedades de um Appender # Criando um anexador: rolling com nível DEBUG log4j.rootLogger =DEBUG, rolling # rolling tem como destino implementação em RollingFileAppender log4j.appender.rolling =org.apache.log4j.RollingFileAppender # Nome do arquivo log4j.appender.rolling.File =saida.log # Tamanho máximo do log log4j.appender.rolling.MaxFileSize =300KB # Número de backups definidos do arquivo log4j.appender.rolling.MaxBackupIndex =1 # Definição da classe e padrão de formatação log4j.appender.rolling.layout =org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern = %d{ABSOLUTE} - %p %c - %m%n 1 2 5 6 7 3 4
  • Usando o log4j: Níveis de logging
    • Nível aprovado do mais genérico ao mais específico
  • Usando o log4j: Níveis de logging // get a logger instance named &quot;com.foo&quot; Logger logger = Logger.getLogger(&quot;com.foo&quot;); // Now set its level. Normally you do not need to set the // level of a logger programmatically. This is usually done // in configuration files. logger.setLevel(Level.INFO); Logger barlogger = Logger.getLogger(&quot;com.foo.Bar&quot;); // This request is enabled, because WARN >= INFO. logger.warn(&quot;Low fuel level.&quot;); // This request is disabled, because DEBUG < INFO. logger.debug(&quot;Starting search for nearest gas station.&quot;); // The logger instance barlogger, named &quot;com.foo.Bar&quot;, // will inherit its level from the logger named // &quot;com.foo&quot; Thus, the following request is enabled // because INFO >= INFO. barlogger.info(&quot;Located nearest gas station.&quot;); // This request is disabled, because DEBUG < INFO. barlogger.debug(&quot;Exiting gas station search&quot;);
  • Usando o log4j: Layout
    • Classes de layout definidas para tipos de saída diferentes
    1 Time 2 Thread 3 Category 4 Context 176 [main] INFO com.foo.Sort - Populating an array of 2 elements. -1- --2--- -3-- --------------------4----------------------------
  • Log4j.properties: Pattern Pattern: &quot;%r [%t] %-5p %c{2} - %m%n&quot; 176 [main] INFO examples.Sort – Populating an array of 2 elements in reverse order r - numero de milissegundos transcorridos desde o inicio do programa t - nome da thread que gerou o evento de log p - prioridade (o -5 indica que deve alinhar a direita se o número de caracteres for menor que cinco) c - nome da classe (2 indica que se o nome completo da classe for &quot;a.b.c&quot; por exemplo, deverá ser mostrado apenas &quot;b.c&quot;) m - é a mensagem (não pode faltar !) n - é o separador de linhas padrão do sistema operacional - &quot; &quot; ou &quot; &quot;
  • Log4j.properties # Criando dois anexadores: stdout e rolling, com nível DEBUG log4j.rootLogger= DEBUG , stdout , rolling # stdout tem como destino o console log4j.appender.stdout =org.apache.log4j.ConsoleAppender # Formato do stdout definido com uso de PatternLayout log4j.appender.stdout.layout =org.apache.log4j.PatternLayout # Definição do padrão para saída log4j.appender.stdout.layout .ConversionPattern = %5p [%t] (%F:%L) - %m%n # rolling tem como destino implementação em RollingFileAppender log4j.appender.rolling =org.apache.log4j.RollingFileAppender # Nome do arquivo log4j.appender.rolling.File =saida.log # Tamanho máximo do log log4j.appender.rolling.MaxFileSize =300KB # Número de backups definidos do arquivo log4j.appender.rolling.MaxBackupIndex =1 # Definição da classe e padrão de formatação log4j.appender.rolling.layout =org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern = %d{ABSOLUTE} - %p %c - %m%n
  • Log4j.properties <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE log4j:configuration PUBLIC &quot;http://logging.apache.org/log4j/docs/api/org/apache/log4j/xml/log4j.dtd&quot;> <log4j:configuration> <appender name=&quot;stdout&quot; class=&quot; org.apache.log4j.ConsoleAppender &quot;> <layout class=&quot; org.apache.log4j.PatternLayout &quot;> <param name=&quot; ConversionPattern &quot; value=&quot;%d{ABSOLUTE} %5p %c{1}:%L - %m%n&quot; /></layout> </appender> <logger name=&quot; org.springframework &quot;> <level value=&quot;info&quot;/> </logger> <logger name=&quot; org.acegisecurity &quot;> <level value=&quot;info&quot;/> </logger> <root> <priority value=&quot; debug &quot; /> <appender-ref ref=&quot; stdout &quot; /> </root> </log4j:configuration>
  • Log4j.properties <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?> <log4j:configuration> <appender name=&quot; trace &quot; class=&quot;org.apache.log4j.FileAppender&quot;> <param name=&quot;file&quot; value=&quot;/trace.log&quot; /> <layout class=&quot;org.apache.log4j.PatternLayout&quot;> <param name=&quot;ConversionPattern“ value=&quot;[%d{ISO8601}] %-5p %c %m %n&quot;/> </layout> <filter class=&quot;org.apache.log4j.varia.LevelRangeFilter&quot;> <param name=&quot;LevelMin&quot; value=&quot;TRACE&quot;/> <param name=&quot;LevelMax&quot; value=&quot;DEBUG&quot;/> </filter> </appender> <appender name=&quot; error &quot; class=&quot;org.apache.log4j.FileAppender&quot;> <param name=&quot;file&quot; value=&quot;/error.log&quot; /> <layout class=&quot;org.apache.log4j.PatternLayout&quot;> <param name=&quot;ConversionPattern“ value=&quot;[%d{ISO8601}] %-5p %c %m %n&quot;/> </layout> <filter class=&quot;org.apache.log4j.varia.LevelRangeFilter&quot;> <param name=&quot;LevelMin&quot; value=&quot;INFO&quot;/> <param name=&quot;LevelMax&quot; value=&quot;FATAL&quot;/> </filter> </appender> <root> <level value=&quot;all&quot; /> <appender-ref ref=&quot;trace&quot;/> <appender-ref ref=&quot;error&quot;/> </root> </log4j:configuration>
  • O Impacto no Desempenho com o uso do log4j
    • Nível de Desempenho de um sistema, com uso de log , sofre um impacto
    • Ao avaliar o impacto, verificar:
      • Tipo de anexador usado
      • Tempo gasto na construção da mensagem
      • Padrão de formatação das mensagens
      • Profundidade da hierarquia de log
  • Usando a Java 1.4 Logging API
    • A partir da versão 1.4 do J2SE (nativo)
    • Classe principal: java.util.logging.Logger
    • Logging API e Struts: acesso também via JCL
    try { ... fluxo normal de execução } catch (IOException e) { // exceção – uso de log para registro // Cria um suporte para escrever o log no arquivo teste.log FileHandler handler = new FileHandler(&quot;teste.log&quot;); // Associa ao logger Logger logger = Logger.getLogger(&quot;curso.log.exemplo&quot;); logger.addHandler(handler); logger.log(Level.SEVERE, &quot;Exceção de I/O&quot;, e); }
  • Usando a Java Logging API
    • Pacote java.util.logging ( JavaSE API )
    • Classes
      • Logger, Level e LogManager
  • Revisão e Laboratório
  • Referências
    • http://commons.apache.org/logging/guide.html