Sunteți pe pagina 1din 31

1

April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 1


Modulo I
LoggingJ SE e Log4J
Prof. Ismael H F Santos
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 2
Linguagem de Programao JAVA
Ismael H. F. Santos, Apostila UniverCidade, 2002
The Java Tutorial: A practical guide for programmers
Tutorial on-line: http://java.sun.com/docs/books/tutorial
Java in a Nutshell
David Flanagan, OReilly & Associates
Just Java 2
Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron
Books.
Java 1.2
Laura Lemay & Rogers Cadenhead, Editora Campos
Bibliografia
2
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 3
Bibliografia
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 4
Ementa
Princpios e Padres de Projeto de SW
LoggingJ SE
Log4J
3
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 5
JSE
Logging
POO-J ava
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 6
Logging
4
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 7
Logging
Logging: manuteno do registro do comportamento de
uma aplicao.
Por que realizar logging?
Mensagens de log podem ajudar na depurao da aplicao.
Mensagens de log fornecem o contexto da execuo de uma
aplicao
Quando utilizar logging?
Na fase de desenvolvimento: para depurar a aplicao.
O que houver de errado? Onde ocorreu? Por que ocorreu?
Na fase de produo: ajuda a resolver problemas de execuo.
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 8
Logging- Desvantagens
Instrues de log tm o potencial de aumentar o
tamanho do executvel; aumentando o tempo de carga
da aplicao
Podem reduzir a performance da aplicao.
5
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 9
O componente Logger
O ponto de entrada para o logging um objeto Logger.
Criamos um objeto dessa classe e requisitamos a ele
que faa o log de mensagens.
H diversos mtodos de log (i.e., mtodos que aceitam
como argumento uma mensagem de log) existentes em
Logger.
Alm disso, todo objeto da classe Logger possui duas
propriedades importantes:
Seu nvel
Seu nome
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 10
The J avaTMLogging APIs - package java.util.logging,
software servicing and maintenance at customer sites
producing log reports suitable for analysis by end users,
system administrators, field service engineers, and
software development teams
The Logging APIs capture information such as
security failures,
configuration errors,
performance bottlenecks,
and/or bugs in the application or platform
6
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 11
Logging Control Flow
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 12
Loggingarchitecture
Applications make logging calls on Logger objects.
Logger objects allocate LogRecord objects which are
passed to Handler objects for publication
Handlers may use logging Levels and (optionally)
Filters to decide if they are interested in a particular
LogRecord
Handler can (optionally) use a Formatter to localize
and format the message before publishing it to an I/O
stream
7
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 13
Logging
Loggers are named entities, using dot-separated names,
namespace is hierarchical and is managed by the
LogManager
The namespace should typically be aligned with the J ava
packaging namespace
Loggers keep track of their parent loggers in the logging
namespace,
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 14
Logging
Loggers may inherit various attributes fromtheir parents
in the logger namespace
Logging level. If a Logger's level is set to be null then the Logger
will use an effective Level that will be obtained by walking up the
parent tree and using the first non-null Level.
Handlers. By default a Logger will log any output messages to its
parent's handlers, and so on recursively up the tree. But Loggers
may also be configured to ignore Handlers higher up the tree.
(useParentHandlers=false)
Resource bundle names. If a logger has a null resource bundle
name, then it will inherit any resource bundle name defined for its
parent, and so on recursively up the tree.
8
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 15
Logger
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 16
Nveisde Severidade
9
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 17
Configurao
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 18
ConfiguraoDeclarativa
10
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 19
ExemploLogging J 2SE
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 20
Log4j
POO-J ava
11
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 21
Log4j
Log4j um projeto de cdigo aberto (open source) que
permite ao desenvolvedor incluir logging em sua
aplicao.
http://logging.apache.org
Fornece servios de logging para auditoria e depurao
de aplicaes.
Com o Log4j, podemos ativar e desativar o logging sem
a necessidade de modificar os binrios da aplicao.
Isso pode ser controlado apenas editando um arquivo de
configurao (detalhes mais adiante).
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 22
Log4j
Permite o controle dinmico de:
Destino da sada de log (email, console, SGBD, arquivo do
SO, servidores de log, etc.)
Que informao deve ser registrada
Formatao da sada (texto, HTML, XML, etc)
Foi implementado para outras linguagens alm de J ava:
C, C++, C#, Perl, Python, Ruby e Eiffel
12
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 23
Instalao do Log4j
A verso atual do Log4J pode ser encontrada em
http://logging.apache.org/log4j/docs/download.html
disponveis o cdigo fonte e as bibliotecas (.jar)
Faa a descompactao dos arquivos para alguma pasta.
Adicione a biblioteca (.jar) do log4J no classpath da
aplicao.
Nome do arquivo da biblioteca: log4j-xxx.jar (onde xxx a
verso).
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 24
Componentes do Log4J
A API do Log4j tem os seguintes componentes
principais:
Logger (classe)
Appender (interface)
Layout (classe)
H tambm componentes acessrios (auxiliares):
Level
PropertyConfigurator, DOMConfigurator
13
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 25
Nvel de um Logger
O nvel de um objeto logger determina que mensagens
de log so realmente consideradas por este objeto.
Mensagens com nvel igual ou mais alto que o nvel
definido para o logger so enviadas para a sada.
H 8 nveis, definidos como constantes (inteiras) na
classe Level (tambm do log4j):
DEBUG <INFO <WARN <ERROR <FATAL
ALL (nvel mais baixo) e OFF (nvel mais alto)
Um logger pode ser definido em umdesses nveis
O mtodo setLevel permite definir o nvel do logger
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 26
Mtodo setLevel - exemplo
O Log4j registra uma mensagem sse o mtodo de log
utilizado corresponde a um nvel que igual ou maior
que o nvel do logger.
Exemplo:
Logger logger = Logger.getLogger(MinhaClasse.class.getName());
...
logger.setLevel(Level.ERROR);
...
14
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 27
Mtodos de log
Mtodo de log =mtodo chamado quando desejamos
registrar uma mensagem no log na aplicao.
Mtodos de log existentes na classes Logger so:
debug, info, warn, error e fatal.
Cada um desses mtodos est associado a um nvel,
correspondente ao seu nome.
e.g., logger.info( Servidor Levantado" ) uma
requisio de log no nvel INFO.
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 28
Mtodos de log
Habilitao versus desabilitao
Diz-se que uma mensagem de log est habilitada se o nvel do
mtodo de log utilizado for maior ou igual ao nvel do logger.
Do contrrio, diz-se que a mensagem est desabilitada.
public void warn(Object message [ , Throwable t ]);
public void info(Object message [ , Throwable t ]);
public void fatal(Object message [ , Throwable t ]);
public void error(Object message [ , Throwable t ]);
public void debug(Object message [ , Throwable t ]);
15
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 29
Mtodos de log- exemplo
Logger logger = Logger.getLogger(MinhaClasse.class.getName());
logger.setLevel(Level.ERROR);
...
logger.info("Incio..."); // Mensagem desabilitada
...
logger.error("Entrada invlida!"); // Mensagem habilitada
...
logger.fatal("Erro fatal. Abortando!"); // Mensagem habilitada
...
catch (Exception ex) {
logger.error(Exceo no esperada.", ex);
return false;
}

Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 30


Uso dos mtodos de log- Melhores
Prticas
Use debug para mensagens de depurao, que no
devem ser gravadas quando a aplicao estiver em
produo.
Use info para mensagens similares ao modo
"verbose".
Use warn para avisos, que so gravados em algum
lugar. Avisos no devem corresponder a situaes em
que a aplicao deve parar de executar.
Use error para mensagens que so registradas por
conta de algum erro recupervel da aplicao.
Use fatal para mensagens crticas; aps a gravao
das mesmas, a aplicao deve ser abortada.
16
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 31
Nome de um Logger
O padro de nomenclatura para objetos da classe
Logger semelhante ao encontrado para classes em
J ava.
(i.e. com.pdxinc paide com.pdxinc.nhinar)
Prtica normalmente utilizada: aproveitar o nome de
uma classe como o nome do seu logger.
public class MinhaClasse {
private static Logger log= Logger.getLogger(MinhaClasse.class.getName());
...
}
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 32
Appenders
No log4j, Appender uma interface que representa o
destinatrio da sada do log.
Um logger pode ter vrios appenders associados a ele.
Ou seja, o Log4j permite que uma requisio de log seja
enviada para mais de um objeto que implemente
Appender.
O mtodo addAppender da classe Logger adiciona um
objeto Appender a um certo logger.
H diversas classes que implementam a interface
Appender...
17
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 33
Classes que implementam Appender
ConsoleAppender: envia requisies de log para a
sada padro (System.out ou System.err).
FileAppender: envia requisies de log para um arquivo
RollingFileAppender
subclasse de FileAppender,
pode fazer um backup do arquivo sempre que ele atingir um
determinado tamanho.
DailyRollingFileAppender
subclasse de FileAppender,
pode fazer um backup de tempos em tempos (e.g, a cada
semana).
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 34
Classes que implementam
Appender (cont)
SMTPAppender - appender para enviar o log para um
destinatrio de e-mail
SocketAppender - envia os eventos de log para um
servidor de logs remoto atravs do protocolo TCP.
NTEventLogAppender - envia para o sistema de log de
uma mquina com plataforma Windows.
SyslogAppender - envia os logs para um daemon
(monitor de logs) remoto
JMSAppender - envia os logs como uma mensagem
J MS
AsyncAppender - possibilita que os logs sejam
coletados em um buffer e depois enviados para um ou
mais appender anexados a ele.
18
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 35
ConsoleAppender - exemplo
public class ExemploConsoleAppender {
static Logger logger =
Logger.getLogger(ExemploConsoleAppender.class.getName());
public static void main(String args[]) {
SimpleLayout layout = new SimpleLayout();
ConsoleAppender appender = new ConsoleAppender(layout);
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
logger.debug(Mensagemde depurao.");
}
}
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 36
FileAppender - exemplo
public class ExemploFileAppender {
static Logger logger = Logger.getLogger(simpandfile.class);
public static void main(String args[]) {
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;
try {
appender = new FileAppender(layout, "output1.txt", false);
} catch(Exception e) {

}
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug(Mensagemde DEBUG"); logger.info(" Mensagemde INFO");
logger.warn(" Mensagemde WARN"); logger.error(" Mensagemde ERROR");
logger.fatal(" Mensagemde FATAL");
}
}
19
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 37
Layouts
Alm de registrar mensagens de log, o Log4j pode
tambm registrar:
Instante (data e hora) em que o log foi requisitado,
Prioridade da mensagem (DEBUG, WARN, FATAL etc.),
Nome da classe, nome do mtodo, nmero da linha no cdigo
fonte, onde o log foi requisitado,
etc
O formato do que registrado em log especificado no
layout ao qual o appender associado.
Um appender deve ter um Layout associado.
Layout a classe base do Log4j responsvel pela
formatao da sada para um certo objeto Appender.
Classes do Log4j que especificam a formao estendem Layout
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 38
Subclasses de Layout
H no log4j diversas subclasses de Layout predefinidas:
SimpleLayout: imprime o nvel, o smbolo '-' e a
mensagem de log.
HTMLLayout formata a sada como HTML.
XMLLayout formata a sada como XML.
PatternLayout formata a sada usando um
padro de converso.
DateLayout
20
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 39
SimpleLayout - exemplo
public class ExemploConsoleAppender {
static Logger logger =
Logger.getLogger(ExemploConsoleAppender.class.getName());
public static void main(String args[]) {
SimpleLayout layout = new SimpleLayout();
ConsoleAppender appender = new ConsoleAppender(layout);
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
logger.debug(Mensagemde depurao.");
}
}
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 40
PatternLayout - exemplo
public class ExemploPatternLayout {
static Logger logger =
Logger.getLogger(ExemploPatternLayout.class.getName());
public static void main(String args[]) {
String pattern = "Durao do programa emmilisegundos: %r %n";
pattern += "Nome da classe: %C %n";
pattern += "Data no formato ISO8601: %d{ISO8601} %n";
pattern += "Local do evento de log: %l %n";
pattern += "Mensagem: %m %n %n";
PatternLayout layout = new PatternLayout(pattern);
ConsoleAppender appender = new ConsoleAppender(layout);
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
logger.debug("Mensagemde depurao.");
}
}
21
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 41
Log4j
X
JSE logging
POO-J ava
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 42
Output from HelloLog4j
0 [main] DEBUG HelloLog4j - In the main method
0 [main] INFO HelloLog4j - What a beautiful day.
10 [main] ERROR HelloLog4j - This is an error message.
22
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 43
Hello java.util.logging
import java.util.logging.*;
public class HelloJDKLogging
{
private static Logger logger =
Logger.getLogger("com. foo.HelloJDKLogging");
public static void main(String argv[])
{
logger.setLevel(Level.ALL);
logger.fine(Program started");
logger.info(This app uses java.util.logging);
logger.warning(Oops, I did it again");
}
}
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 44
Output from HelloJ DKLogging
J ul 23, 2002 12:12:43 PM HelloJ DKLogging main
INFO: This app uses java.util.logging
J ul 23, 2002 12:12:43 PM HelloJ DKLogging main
WARNING: Oops, I did it again
23
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 45
Comparison:
log4j & java.util.logging
Hierarchical
namespaces
Hierarchical
namespaces
Named loggers Named loggers
LogManager class LogManager class
Filter interface Filter class
java.util.logging org.apache.log4j
Handlers Appenders
Level class Level class
Formatters Layouts
Logger class Logger class
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 46
Level
java.util.Logging.Level
Order: FINEST <FINER <FINE <CONFIG <INFO <WARNING <SEVERE
Other levels: Level.ALL
Level.OFF
org.apache.log4j.Level
Order: DEBUG <INFO <WARN <ERROR <FATAL
Other levels: Level.ALL
Level.OFF
24
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 47
Log4j Appenders
AsyncAppender
ConsoleAppender
DailyRollingFileAppender
J MSAppender
NTEventLogAppender
NullAppender
RollingFileAppender
SMTPAppender
SocketAppender
SyslogAppender
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 48
java.util.loggingHandlers & Formaters
Handlers
StreamHandler
ConsoleHandler
FileHandler
SocketHandler
MemoryHandler
Formaters
SimpleFormatter
XMLFormatter
25
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 49
Logging: Best and Worst practices
Best Practices
use the appropriate message level
roll your log files daily / weekly
review your error log on a daily basis
Worst Practices
System.out.println / System.err.println
logging passwords to a log file
logging informational messages to STDERR
logging a message for every single HTTP request
multiple applications sending log messages to a single log
file
ignoring error messages that appear in your application error
log
misleading log message
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 50
J SE Loggingx Log4j
The primary weakness of J DK Logging over Log4J is
that the J DKs configuration file isn't as robust, but it does
provide a mechanismto punt down in to classes to do
arbitrary work rather than having a more rich
configuration file format
Property "config". This property is intended to allow
arbitrary configuration code to be run. The property
defines a whitespace separated list of class names. A
newinstance will be created for each named class. The
default constructor of each class may execute arbitrary
code to update the logging configuration, such as setting
logger levels, adding handlers, adding filters, etc
26
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 51
Log4j
Configurao
POO-J ava
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 52
Configurao do log4j por arquivo
As configuraes do log4j no devem ser feitas no cdigo
fonte.
Isso porque desejvel mudar as opes de logging ser ter
que recompilar a aplicao.
Modo adequado: atravs de um arquivo de configurao.
H dois modos de especificar o arquivo de configurao:
Arquivo de propriedades (PropertyConfigurator)
Arquivo XML (DOMConfigurator)
27
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 53
PropertyConfigurator - exemplo
#define o nvel do logger raiz e o nome de seu appender (htmlAppender)
log4j.rootLogger=DEBUG, htmlAppender
# define a classe do appender
log4j.appender.htmlAppender=org.apache.log4j.RollingFileAppender
#nome do arquivo de log
log4j.appender.htmlAppender.File=logging/HTMLLayout.html
# define a classe para formao (layout)
log4j.appender.htmlAppender.layout=org.apache.log4j.HTMLLayout
# define que deve ser registrada informao de contexto
log4j.appender.htmlAppender.layout.LocationInfo=true
# ttulo do arquivo de log
log4j.appender.htmlAppender.layout.Title=Log gerado pelo Log4j
Considere o seguinte arquivo de propriedades:
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 54
PropertyConfigurator exemplo
(cont.)
public class ExemploPropertyConfigurator {
static Logger logger =
Logger.getLogger(ExemploPropertyConfigurator.class.getName());
public static void main(String[] args) {
PropertyConfigurator.configure(args[0]);
logger.info("Aplicao iniciada.");
doSomething();
logger.info("Aplicao terminada.");
}
}
Considere que o arquivo de propriedades
anterior foi passado como argumento para o
programa a seguir:
28
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 55
PropertyConfigurator exemplo
(cont.)
O arquivo de log criado a partir do programa anterior:
Ter o nome HTMLLayout.html,
Ter como contedo uma tabela HTML com as mensagens
de log em cada linha da tabela.
Para cada mensagem, ter:
o tempo (em milisegundos) decorrido desde quando o
programa foi iniciado,
a thread que disparou o log,
o nvel de prioridade,
(se LocationInfo =true) a classe, o nome do arquivo *.java
desta classe e o nmero da linha,
a mensagem de log propriamente dita.
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 56
Customizaes com PatternLayout
r - nmero de milissegundos transcorridos desde o
incio do programa
t - nome da thread que gerou o evento de log
p - prioridade (o -5 indica que deve alinhar direita se
o nmero de caracteres for menor que cinco)
Pattern: "%r [%t] %-5p %c{2} - %m%n"
176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order
29
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 57
Customizaes com PatternLayout
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 (no pode faltar !)
n - o separador de linhas do SO ("\n" ou "\r\n)
Pattern: "%r [%t] %-5p %c{2} - %m%n"
176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 58
Log4j Resumo
POO-J ava
30
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 59
Log4j - Resumo
Principais componentes:
Logger: permite realizar requisies de log.
Appender: corresponde ao destinatrio de uma mensagem
de log.
Layout: especifica o formato de uma mensagem de log
Propriedades de um objeto Logger
nome
nvel
Hierarquia de loggers oferece um maior controle;
Diversas sadas: Console, Arquivo, Banco de Dados,
XML, HTML, e-mail, ...
API de cdigo aberto;
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 60
Log4j - Resumo
Elimina a necessidade de uso de System.out
para depurao do cdigo fonte;
Permite controlar de maneira flexvel as
sadas de log;
Configurao do log em tempo de execuo
sem alterao na codificao e sim em um
arquivo de configurao;
Com o uso de logging, h a possibilidade de
diminuio do desempenho da aplicao.
31
Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 61
Exerccio
log4j.rootLogger=DEBUG, htmlAppender
log4j.appender.htmlAppender=org.apache.log4j.ConsoleAppender
log4j.appender.htmlAppender.layout=org.apache.log4j.PattenLayout
log4j.appender.htmlAppender.layout. ConversionPattern=%-4r [%t] %-5p %c - %m%n
log4j.rootLogger=DEBUG, htmlAppender
# htmlAppender is set to be a ConsoleAppender which outputs to System.out.
log4j.appender.htmlAppender=org.apache.log4j.ConsoleAppender
# htmlAppender uses PatternLayout.
log4j.appender.htmlAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.htmlAppender.layout.ConversionPattern=%-5p [%t]: %m%n
#log4j.logger.package.MyApp =WARN
Experimente utilizar os arquivos de configurao
a seguir:

S-ar putea să vă placă și