ssl*_*oan 8 java logging logback slf4j
我在tomcat 6中有以下目录结构:
tomcat
|-lib
| |- logback-classic.jar
| |- logback-core.jar
| |- slf4j-api.jar
| |- myState.jar
|-shared
| |-lib
| | |- myStateLogback.xml
|-webapps
| |-myApp
| | |-WEB-INF
| | | |-logback.xml
| | | |-lib
| | | | |-jcl-over-slf4j.jar
| | | | |-logback-classic.jar
| | | | |-logback-core.jar
| | | | |-slf4j-api.jar
Run Code Online (Sandbox Code Playgroud)
myState.jar需要存在于tomcat/lib目录中,因为它包含tomcat启动时作为全局资源所需的类.它将其记录到slf4j,因此还需要slf4j和logback jar.它使用JoranConfigurator加载myStateLogback.xml.
myApp webapp将其记录到commons-logging,但是我希望它通过slf4j进行logback以准备将所有日志记录移动到slf4j,所以我使用的是jcl-over-slf4j桥.
通过上面的设置,日志记录全部有效,但我在启动时收到以下警告:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/tomcat/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/tomcat/webapps/myApp/WEB-INF/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Run Code Online (Sandbox Code Playgroud)
如果我从webapp的lib目录中取出logback-classic,我会得到以下异常:
Exception in thread "Timer-30" java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type org/slf4j/ILoggerFactory used in the signature
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:284)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272)
Run Code Online (Sandbox Code Playgroud)
如果我从webapp的lib目录中删除了2个logback jar和slf4j-api.jar,我没有得到警告也没有例外,但我的webapp的日志被myStateLogback.xml文件选中并转到它的logger,这是我不想要的.我知道我可以过滤掉我不想要的语句,但我想为webapp和jar分别配置文件.有没有办法实现这个目标?
我正在使用tomcat 6.0.23,logback 0.9.29和slf4j 1.6.3.
谢谢,莎拉
| 归档时间: |
|
| 查看次数: |
10824 次 |
| 最近记录: |