2013-11-13 3 views
0

Я пытаюсь настроить log4j на моем веб-приложении. Веб-сервер: Tomcat 7.Tomcat не может создать экземпляр org.apache.log4j.varia.LavelMatchFilter класс

Я получаю следующее исключение:

log4j:ERROR Could not instantiate class [org.apache.log4j.varia.LevelMatchFilter ]. 
    java.lang.ClassNotFoundException: org.apache.log4j.varia.LevelMatchFilter  
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198) 
    at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:326) 
    at org.apache.log4j.PropertyConfigurator.parseAppenderFilters(PropertyConfigurator.java:881) 
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:812) 
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735) 
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547) 
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483) 
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127) 
    at org.apache.log4j.Logger.getLogger(Logger.java:104) 
    at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:262) 
    at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:108) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1025) 
    at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:844) 
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:541) 
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292) 
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269) 
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:657) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:269) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

я положил log4j.properties в WEB-INF/classes каталог как многие пользователи SO предложили в других ответах на другие вопросы.

Я положил slf4j-api-1.7.5.jar, slf4j-log4j12-1.7.5.jar, log4j-1.2.16.jar в каталог WEB-INF/lib.

Мой файл свойств заключается в следующем:

log4j.rootLogger = INFO,infoAppender,errAppender 

log4j.appender.infoAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.infoAppender.File= D://logs//info//info.log 
log4j.appender.infoAppender.DatePattern='_'dd-MM-yyyy 
log4j.appender.infoAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.infoAppender.layout.conversionPattern=%d{dd-MM-yyyy HH:mm:ss} %5p %m%n 
log4j.appender.infoAppender.filter.infoFilter=org.apache.log4j.varia.LevelMatchFilter  
log4j.appender.infoAppender.filter.infoFilter.LevelToMatch=INFO  
log4j.appender.infoAppender.filter.infoFilter.AcceptOnMatch=true 
log4j.appender.infoAppender.filter.2=org.apache.log4j.varia.DenyAllFilter 


log4j.appender.errAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.errAppender.File= D://logs//error/err.log 
log4j.appender.errAppender.DatePattern='_'dd-MM-yyyy 
log4j.appender.errAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.errAppender.layout.conversionPattern=%d{dd-MM-yyyy HH:mm:ss} %5p %m%n 
log4j.appender.errAppender.filter.errFilter=org.apache.log4j.varia.LevelMatchFilter  
log4j.appender.errAppender.filter.errFilter.LevelToMatch=ERROR  
log4j.appender.errAppender.filter.errFilter.AcceptOnMatch=true 
log4j.appender.errAppender.filter.2=org.apache.log4j.varia.DenyAllFilter 

Я лично считаю, что проблема заключается в решении вопросов, как путь к классам, но все файлы .jar и .properties файл в правильном месте. По крайней мере, это правильно в соответствии со многими связанными сообщениями, которые я нашел.

+0

Попробуйте разместить log4j.properties в любом месте вы хотите, и при запуске Tomcat попробуйте указать файл log4j.properties местоположение, '-Dlog4j.configuration = ' – Sam

+0

Спасибо за ответ, Я попробую. BTW, как запустить tomcat с '-Dlog4j.configuration = ' под linux? – Baurzhan

ответ

1

Я тоже встретил этот вопрос, наконец, я нашел корень в файле log4j.properties. у вас есть дополнительное пространство в вашем файле свойств. точно так же, как ваше исключение указывает: log4j: ERROR Не удалось создать экземпляр класса [org.apache.log4j.varia.LevelMatchFilter] дополнительное пространство не ожидается после LevelMatchFilter.

Вот мой

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
 
log4j.appender.stdout.filter.a=org.apache.log4j.varia.LevelMatchFilter 
 
log4j.appender.stdout.filter.a.LevelToMatch=INFO 
 
log4j.appender.stdout.filter.b=org.apache.log4j.varia.DenyAllFilter

1

ОК, я нашел решение. Используйте log4j.xml вместо log4j.properties.

Хм, выглядит странно. Я знаю, что только xml поддерживает фильтры. Но я также прочитал в некоторых SO ответ, что файл log4j.properties поддерживает фильтры для версии 1.2.16. В любом случае, я рекомендую использовать xml.

Смежные вопросы