在WebSphere 8.5上正确配置slf4j和log4j

在WebSphere 8.5上正确配置slf4j和log4j,log4j,websphere,slf4j,Log4j,Websphere,Slf4j,在WebSphere8.5上配置slf4j+log4j的正确方法是什么。 我的做法是: *在应用程序war文件的WEB-INF\lib中包含slf4j api *在webspherelib中包含绑定ja slf4j-log4j *在war文件外部的JVM类路径中包含log4j.xml 唯一的问题是它不起作用。它在初始化时失败并出错。 我猜我的方法错了 谢谢你的帮助 这是堆栈跟踪。请注意,slfj api位于WAR文件的WEB-INF\lib中: Caused by: java.lang.NoCl

在WebSphere8.5上配置slf4j+log4j的正确方法是什么。 我的做法是: *在应用程序war文件的WEB-INF\lib中包含slf4j api *在webspherelib中包含绑定ja slf4j-log4j *在war文件外部的JVM类路径中包含log4j.xml

唯一的问题是它不起作用。它在初始化时失败并出错。 我猜我的方法错了

谢谢你的帮助

这是堆栈跟踪。请注意,slfj api位于WAR文件的WEB-INF\lib中:

Caused by: java.lang.NoClassDefFoundError: org.slf4j.spi.LoggerFactoryBinder
    at java.lang.ClassLoader.defineClassImpl(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:295)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:711)
    at java.net.URLClassLoader.access$400(URLClassLoader.java:92)
    at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1159)
    at java.security.AccessController.doPrivileged(AccessController.java:314)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:594)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:116)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:616)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:584)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:584)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at no.klp.minside.handler.SoapLoggingHandler.<clinit>(SoapLoggingHandler.java:28)
    at java.lang.J9VMInternals.initializeImpl(Native Method)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:236)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)`enter code here`
    at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:110)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
    ... 113 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.spi.LoggerFactoryBinder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:599)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:116)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690)
    ... 147 more
原因:java.lang.NoClassDefFoundError:org.slf4j.spi.LoggerFactoryBinder
位于java.lang.ClassLoader.defineClassImpl(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:295)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:711)
在java.net.URLClassLoader.access$400(URLClassLoader.java:92)
位于java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1159)
位于java.security.AccessController.doPrivileged(AccessController.java:314)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:594)
位于com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204)
在com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:116)上
位于java.lang.ClassLoader.loadClass(ClassLoader.java:690)
位于com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
位于com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
位于com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:616)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:690)
位于com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:584)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:690)
位于com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:584)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:690)
位于org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
在org.slf4j.LoggerFactory.performinization上(LoggerFactory.java:111)
位于org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
位于org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
位于no.klp.minside.handler.SoapLoggingHandler.(SoapLoggingHandler.java:28)
位于java.lang.J9VMInternals.initializeImpl(本机方法)
在java.lang.J9VMInternals.initialize(J9VMInternals.java:236)中
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)`这里输入代码`
位于java.lang.reflect.Constructor.newInstance(Constructor.java:539)
位于org.springframework.beans.BeanUtils.InstanceClass(BeanUtils.java:147)
位于org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:110)
位于org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
... 113更多
原因:java.lang.ClassNotFoundException:org.slf4j.spi.LoggerFactoryBinder
位于java.net.URLClassLoader.findClass(URLClassLoader.java:599)
位于com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204)
在com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:116)上
位于java.lang.ClassLoader.loadClass(ClassLoader.java:690)
... 147多

为什么需要将东西放在应用程序外部的位置?实际上,这是个好问题。我想我认为让绑定由运行时决定是一个好原则。这样我就不必把装订罐放在所有的战车里了。我看到我们的一些应用程序在不包含绑定jar的情况下工作,而有些则没有。我不明白为什么。。我想理解为什么在战争中包含是有效的,而外部不起作用。我认为在JavaEE应用程序的打包方面,这不是一个特别好的原则。由于多个类加载器组织在一个层次结构中,因此只需查找在应用程序中不提供第三方依赖关系的问题。此外,调整服务器类路径通常是一种不好的做法,更不用说放置像slf4j-log4j这样的特定库了。