1) O documento discute técnicas de depuração e log em aplicações Java, incluindo o uso de bibliotecas como Jakarta Commons Logging, log4j e a Java Logging API.
2) A biblioteca log4j permite registrar mensagens de log em vários destinos e oferece controle de nível de log e formato.
3) Tanto o Struts quanto a Java Logging API podem acessar bibliotecas de log externas via Jakarta Commons Logging.
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.
9.
10.
11.
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.
14. Usando o log4j: Níveis de logging // get a logger instance named "com.foo" Logger logger = Logger.getLogger("com.foo"); // 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("com.foo.Bar"); // This request is enabled, because WARN >= INFO. logger.warn("Low fuel level."); // This request is disabled, because DEBUG < INFO. logger.debug("Starting search for nearest gas station."); // The logger instance barlogger, named "com.foo.Bar", // will inherit its level from the logger named // "com.foo" Thus, the following request is enabled // because INFO >= INFO. barlogger.info("Located nearest gas station."); // This request is disabled, because DEBUG < INFO. barlogger.debug("Exiting gas station search");
15.
16. Log4j.properties: Pattern Pattern: "%r [%t] %-5p %c{2} - %m%n" 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 "a.b.c" por exemplo, deverá ser mostrado apenas "b.c") m - é a mensagem (não pode faltar !) n - é o separador de linhas padrão do sistema operacional - "" ou ""
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