Log4J - Funcionalidade semelhante ao SiftingAppender
Eu trabalho em um projeto que usaLog4J. Um dos requisitos é criar um arquivo de log separado para cada thread; isso em si era um problema estranho, de certa forma, criando um novo FileAppender na hora e anexando-o à instância do Logger.
Logger logger = Logger.getLogger(<thread dependent string>);
FileAppender appender = new FileAppender();
appender.setFile(fileName);
appender.setLayout(new PatternLayout(lp.getPattern()));
appender.setName(<thread dependent string>);
appender.setThreshold(Level.DEBUG);
appender.activateOptions();
logger.addAppender(appender);
Tudo correu bem até que percebemos que outra biblioteca que usamos -Spring Framework v3.0.0 (que usaRegisto de Commons) - não joga bola com a técnica acima - os dados de registro do Spring são “vistos” apenas por Anexadores inicializados a partir do arquivo log4.configuration, mas não pelos Anexadores criados em tempo de execução. Então, de volta à estaca zero.
Depois de alguma investigação, descobri que o novo e melhoradoLogback tem um appender -SiftingAppender - que faz exatamente o que precisamos, ou seja, o registro de nível de thread em arquivos independentes.
No momento, migrar para o LogBack não é uma opção, então, estando preso ao Log4J, como posso alcançar a funcionalidade semelhante ao SiftingAppender e manter o Spring feliz também?
Nota: Primavera é usada apenas paraJdbcTemplate funcionalidade, não IOC; a fim de "enganchar" o Spring's Commons Logging no Log4J. Eu adicionei esta linha no arquivo log4j.properties:
log4j.logger.org.springframework = DEBUG
conforme instruídoAqui.