Я работаю в проекте, который использует Log4J. Одним из требований является создание отдельного файла журнала для каждого потока; это само по себе было странной проблемой, несколько упорядоченной путем создания нового FileAppender "на лету" и прикрепления его к экземпляру 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);
Все прошло хорошо, пока мы не поняли, что используем другую библиотеку - Spring Framework v3.0.0 (которые используют Commons Logging) - не играет в мяч с помощью метода выше - данные регистрации Spring "видны" только приложением, инициализированным из файла log4.configuration, но не с помощью среда выполнения создала Appenders. Итак, вернемся к квадрату.
После некоторого расследования я узнал, что новый и улучшенный LogBack имеет appender - SiftingAppender - что делает именно то, что нам нужно, т.е. ведение журнала уровня потока на независимых файлах.
В настоящий момент переход на LogBack не является вариантом, поэтому, будучи застрявшим с Log4J, как я могу достичь функциональности, подобной SiftingAppender, и поддерживать Spring счастливым?
Примечание: Spring используется только для JdbcTemplate, no IOC; для того, чтобы "зацепить" Spring s Commons Logging to Log4J Я добавил эту строку в файл log4j.properties:
log4j.logger.org.springframework = ОТЛАДКА
в соответствии с инструкциями здесь.