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 
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.
[code]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 [%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[/code]
[code]public class Main {
public static void main (String args[]) {
TesteApp1.logger("logando app1!!");
TesteApp2.logger("logando app2"");
}
}
[/code]
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?
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
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.
Entendi…
mas se eu quiser pegar os appenders que já estão definidos no arquivo de properties, como faria??
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