Log4j - Utilizando dois appenders na mesma classe

7 respostas
Andre_Fonseca

Ola,

Eu tenho dois appenders configurados no meu arquivo log4j.properties, como eu faço para na minha classe eu criar duas variávies de log uma para cada appender??

O que eu preciso é algo do tipo

Logger logger1 = Logger.getLogger(MinhaClasse.class); Logger logger2 = Logger.getLogger(MinhaClasse.class);

O logger1 utiliza um appender (JDBC) e o logger2 utiliza outro appender (arquivo)

Alguém já precisou fazer isso?? Se alguem puder me ajudar :slight_smile:

7 Respostas

Andre_Fonseca

Bom,

A dificuldade era de pegar o appender do arquivo de .properties e atribuir para uma variável especifica.
Fiz uma POG aqui que resolve o assunto - não estou bem certo se é POG mesmo..

Eu criei duas classes separadas com métodos estáticos, assim na hora de chamar o log eu chamo estaticamente os métodos das classes.

Além disso eu posso passar os parâmetros que eu precisar para cada classe.

log4j.rootLogger=DEBUG, app1, app2

log4j.appender.app1=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.app1.Threshold=DEBUG
log4j.appender.app1.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.app1.URL=jdbc:oracle:thin:@localhost:1521:xpto
log4j.appender.app1.user=teste
log4j.appender.app1.password=teste
log4j.appender.app1.sql=INSERT INTO foo VALUES('bar')
log4j.appender.app1.layout=org.apache.log4j.PatternLayout 

log4j.appender.app2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.app2.File=logs/xpto.log
log4j.appender.app2.DatePattern='.'EEE
log4j.appender.app2.layout=org.apache.log4j.PatternLayout
log4j.appender.app2.layout.ConversionPattern=%-5p [%t](%C{1}:%L) [%d{ISO8601}] %m%n

#   APP ROOT LOGGER
log4j.logger.com.meupacote.log.app1.TesteApp1=debug, app1
log4j.additivity.com.meupacote.log.app1.TesteApp1=true
log4j.logger.com.meupacote.log.app2.TesteApp2=debug, app2
log4j.additivity.com.meupacote.log.app2.TesteApp2=true
public class Main {
   
    public static void main (String args[]) {
        TesteApp1.logger("logando app1!!");
        TesteApp2.logger("logando app2"");
    }
}
Rodrigo_Manhaes

Não conheço Log4J a fundo, mas não entendi por que você precisa de dois Loggers para ter dois appenders. Eu já usei mais de um appender para o mesmo logger (na verdade três: um para System.out, outro para arquivo-texto e outro, customizado, para Document do Swing) e todos estes appenders recebiam dados do mesmo logger. A não ser que você queira ter logs diferentes para cada tipo de appender. Seria o caso?

Andre_Fonseca

Então, eu já tenho uma aplicação rodando e que faz log em arquivo, eu quero colocar um log em banco mas para apenas umas situações

Ou seja, eu queria mexer o menos possível no código da aplicação

Já que você utilizou antes, como eu faria para, usando uma configuração igual a do log4j.properties acima em alguns lugares do código o meu objeto Logger utilizar o appender para arquivo e em outros lugares utilizar o appender para banco de dados??

Eu até tentei utilizar o método getAppender da classe Logger, mas eu acho que eu tenho que usar Category porque esse método estava me retornando sempre nulo

[]´s

Rodrigo_Manhaes

Você pode instanciar e atribuir um appender via programação. No meu caso, eu criei um appender (estendendo a classe AppenderSkeleton do Log4J) para um javax.swing.text.Document do Swing e o liguei ao logger programaticamente.

final Appender documentAppender = new SwingDocumentAppender(processingLog.getDocument()); logger.addAppender(documentAppender); onde “logger” é um org.apache.log4j.Logger.

Assim, basta que você descubra a classe de appender do Log4J que você deseja utilizar e acredito (nunca fiz) ser possível você instanciar o appender e adicioná-lo on-the-fly ao logger.

Andre_Fonseca

Entendi…

mas se eu quiser pegar os appenders que já estão definidos no arquivo de properties, como faria??

Andre_Fonseca

Bom, na verdade decidimos abortar o uso do log4j aqui, criei uma classe Logger que utiliza a conexão do DAO e insere na tabela que preciso os dados que preciso, que a propósito vem de lugares diferentes…rs

balthazar

http://www.guj.com.br/posts/list/37698.java

Criado 16 de junho de 2008
Ultima resposta 1 de ago. de 2008
Respostas 7
Participantes 3