barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 17 июля 2012 г.

org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.

Часа полтора ушло на казалось бы простейшую проблему: использовать apache commons logging в связке с log4j. Проблема была в следующем: в веб-приложении, разворачиваемом на Tomcat 6, имеются файлы конфигурации commons-logging и log4j со следующим содержимым:

commons-logging.properties:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.properties:
log4j.debug=false
log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%-4r [%t] %-5p %c %x - %m%n 
Первый конфигурационный файл должен подхватываться commons-logging`ом самостоятельно как первый с таким именем в CLASSPATH, путь ко второму указывается явно в web.xml. Сами jar-ники commons-logging-1.1.1.jar и log4j-1.2.15.jar в /WEB-INF/lib приложения лежат. Однако при попытке чтобы то ни было залогировать в веб-приложении валится исключение:
org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
Как оказалось, проблема была в следующем: commons-logging-1.1.1.jar лежал также и в %JAVA_HOME%/jre/lib/ext (так уж получилось, что он залетел туда при установке КриптоПРО JCP). Поэтому и загружался этот jar-ник не тем класслоадером, что и остальные либы веб-приложения, и jar-ника log4j в /WEB-INF/lib ему было не видно. Выход - либо закинуть jar-ник log4j туда же в %JAVA_HOME%/jre/lib/ext, либо - удалить оттуда commons-logging-1.1.1.jar (в моем случае - не вариант, т.к. нарушило бы работу JCP).

Комментариев нет:

Отправить комментарий