Capítulo 10 Depurando e Usando Log
Esquema <ul><li>Depuração e Log </li></ul><ul><li>Usando o Jakarta Commons Logging </li></ul><ul><li>Usando o log4j </li><...
Depuração e Log <ul><li>Depuração: critério importante para ambientes de testes </li></ul><ul><ul><li>Necessita de uma pol...
Depuração e Log: JSP String param = getServletConfig(). getInitParameter(“debug”); If (param.equals(“2”)){ System.out.prin...
Jakarta Commons Logging (JCL) <ul><li>Ponte entre conexão dos componentes Struts e arcabouços de  log,  como o  Apache log...
Jakarta Commons Logging (JCL) <ul><li>http://commons.apache.org/logging/ </li></ul>Ponte Apache Commons Logging Log4J Java...
Jakarta Commons Logging (JCL) # exemplo de uso do SimpleLog org.apache.commons.logging.Log  = org.apache.commons.logging.i...
Jakarta Commons Logging (JCL) <ul><li>Funcionalidade normalmente usada para fins de teste e depuração somente </li></ul><u...
Usando o  Jakarta Commons Logging (JCL) <ul><li>Instância de  org.apache.commons.logging.Log  via  LogFactory.getLog() </l...
Usando o log4j <ul><li>Uma das bibliotecas de  log  mais populares  </li></ul><ul><li>Classe principal:  org.apache.log4j....
Usando o log4j <ul><li>Permite o envio de mensagens de log para múltiplos destinos </li></ul><ul><ul><li>Appenders ou anex...
Usando o log4j: Propriedades de um Appender # Criando um anexador: rolling com nível DEBUG log4j.rootLogger =DEBUG, rollin...
Usando o log4j: Níveis de logging <ul><li>Nível aprovado do mais genérico ao mais específico </li></ul>
Usando o log4j: Níveis de logging // get a logger instance named &quot;com.foo&quot; Logger  logger = Logger.getLogger(&qu...
Usando o log4j: Layout <ul><li>Classes de layout definidas para tipos de saída diferentes </li></ul>1 Time 2 Thread 3 Cate...
Log4j.properties: Pattern Pattern: &quot;%r [%t] %-5p %c{2} - %m%n&quot;  176 [main] INFO examples.Sort –  Populating an a...
Log4j.properties # Criando dois anexadores: stdout e rolling, com nível DEBUG log4j.rootLogger= DEBUG ,  stdout ,  rolling...
Log4j.properties <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <!DOCTYPE log4j:configuration PUBLIC &quot;htt...
Log4j.properties <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?> <log4j:configuration>  <appender name=&quot; ...
O Impacto no Desempenho com o uso do log4j <ul><li>Nível de Desempenho de um sistema, com uso de  log , sofre um impacto <...
Usando a Java 1.4 Logging API <ul><li>A partir da versão 1.4 do J2SE (nativo) </li></ul><ul><li>Classe principal:   java.u...
Usando a Java Logging API <ul><li>Pacote java.util.logging ( JavaSE  API ) </li></ul><ul><li>Classes </li></ul><ul><ul><li...
Revisão e Laboratório
Referências <ul><li>http://commons.apache.org/logging/guide.html </li></ul>
Upcoming SlideShare
Loading in …5
×

Struts Cap10 DepuraçãO E Log

1,515
-1

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,515
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Struts Cap10 DepuraçãO E Log

    1. 1. Capítulo 10 Depurando e Usando Log
    2. 2. Esquema <ul><li>Depuração e Log </li></ul><ul><li>Usando o Jakarta Commons Logging </li></ul><ul><li>Usando o log4j </li></ul><ul><li>O Impacto do Desempenho com uso de log4j </li></ul><ul><li>Usando a Java 1.4 Logging API </li></ul>
    3. 3. Depuração e Log <ul><li>Depuração: critério importante para ambientes de testes </li></ul><ul><ul><li>Necessita de uma política de logging </li></ul></ul><ul><li>JSP/Servlets: definição de níveis de depuração presentes na especificação </li></ul><ul><ul><li>( web.xml ) </li></ul></ul><ul><li>No Struts: a partir da versão 1.1, implementação da interface Jakarta Commons Logging </li></ul><init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param>
    4. 4. 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>
    5. 5. Jakarta Commons Logging (JCL) <ul><li>Ponte entre conexão dos componentes Struts e arcabouços de log, como o Apache log4j e a Java 1.4 Logging API </li></ul><ul><li>Instalação do pacote Commons Logging </li></ul># 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
    6. 6. Jakarta Commons Logging (JCL) <ul><li>http://commons.apache.org/logging/ </li></ul>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
    7. 7. 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
    8. 8. Jakarta Commons Logging (JCL) <ul><li>Funcionalidade normalmente usada para fins de teste e depuração somente </li></ul><ul><ul><li>No ambiente de produção, esta deve ser desabilitada </li></ul></ul><ul><li>Já incluso no Struts 1.1 </li></ul><ul><li>Opções de APIs de logging </li></ul><ul><ul><li>Commons SimpleLog e Log4J </li></ul></ul><ul><ul><li>Configurável via commons-logging.properties </li></ul></ul><ul><ul><ul><li>Disponível em /WEB-INF/classes </li></ul></ul></ul>
    9. 9. Usando o Jakarta Commons Logging (JCL) <ul><li>Instância de org.apache.commons.logging.Log via LogFactory.getLog() </li></ul><ul><li>Métodos: debug(), error(), fatal(), warn() </li></ul>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( ) );
    10. 10. Usando o log4j <ul><li>Uma das bibliotecas de log mais populares </li></ul><ul><li>Classe principal: org.apache.log4j.Logger </li></ul><ul><li>Interface </li></ul><ul><li>com Jakarta </li></ul><ul><li>Commons </li></ul><ul><li>Logging </li></ul><ul><li>Definição de níveis de log </li></ul><ul><li>Instalação e configuração: configuração ( log4j.properties ) </li></ul>
    11. 11. Usando o log4j <ul><li>Permite o envio de mensagens de log para múltiplos destinos </li></ul><ul><ul><li>Appenders ou anexadores </li></ul></ul><ul><li>Classes que processam as mensagens </li></ul><ul><ul><li>log4J user guide </li></ul></ul>
    12. 12. 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
    13. 13. Usando o log4j: Níveis de logging <ul><li>Nível aprovado do mais genérico ao mais específico </li></ul>
    14. 14. 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;);
    15. 15. Usando o log4j: Layout <ul><li>Classes de layout definidas para tipos de saída diferentes </li></ul>1 Time 2 Thread 3 Category 4 Context 176 [main] INFO com.foo.Sort - Populating an array of 2 elements. -1- --2--- -3-- --------------------4----------------------------
    16. 16. 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;
    17. 17. 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
    18. 18. 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>
    19. 19. 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>
    20. 20. O Impacto no Desempenho com o uso do log4j <ul><li>Nível de Desempenho de um sistema, com uso de log , sofre um impacto </li></ul><ul><li>Ao avaliar o impacto, verificar: </li></ul><ul><ul><li>Tipo de anexador usado </li></ul></ul><ul><ul><li>Tempo gasto na construção da mensagem </li></ul></ul><ul><ul><li>Padrão de formatação das mensagens </li></ul></ul><ul><ul><li>Profundidade da hierarquia de log </li></ul></ul>
    21. 21. Usando a Java 1.4 Logging API <ul><li>A partir da versão 1.4 do J2SE (nativo) </li></ul><ul><li>Classe principal: java.util.logging.Logger </li></ul><ul><li>Logging API e Struts: acesso também via JCL </li></ul>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); }
    22. 22. Usando a Java Logging API <ul><li>Pacote java.util.logging ( JavaSE API ) </li></ul><ul><li>Classes </li></ul><ul><ul><li>Logger, Level e LogManager </li></ul></ul>
    23. 23. Revisão e Laboratório
    24. 24. Referências <ul><li>http://commons.apache.org/logging/guide.html </li></ul>

    ×