关于这个主题有几个问题,但我找不到一个与Groovy@slf4j
“ast”注释有关的问题。从表面上看,这不仅方便,而且可以根据日志级别有条件地执行内容。
在我的书《Groovy In Action》中,它说:
将Slf4j记录器作为静态最终org.Slf4j.logger注入到类中,并使用org.Slf4j.loggerFactory.getLogger(类)初始化它。LogBack框架使用SLF4J作为底层记录器,因此LogBack用户应该使用@SLF4J
compile 'ch.qos.logback:logback-classic:1.2.1'
但每次运行带有此注释的测试类,或直接运行应用程序时,我都会得到:
SLF4J:类路径包含多个SLF4J绑定。slf4j:在[jar:file:/d:/apps/...fbb0e/logback-classic-1.2.1.jar!/org/slf4j/impl/staticloggerbinder.class]中找到绑定
slf4j:在[jar:file:/d:/apps/...eca4e/slf4j-log4j12-1.7.6.jar!/org/slf4j/impl/staticloggerbinder.class]中找到绑定
slf4j:请参阅http://www.slf4j.org/codes.html#multiple_bindings获取解释。
SLF4J:实际绑定的类型为[ch.qos.logback.classic.util.ContextSelectorStaticBinder]
...特别是这会“污染”测试的stderr
输出。
我尝试手动删除slf4j-log4j12-1.7.6.jar文件...但它得到了自动重新生成的下一个Gradle任务。
乔恩·斯基特是这本书的作者之一。是的,乔恩飞碟。救救乔恩!
+--- org.codehaus.groovy:groovy-all:2.6.0-alpha-2
+--- net.bytebuddy:byte-buddy:1.6.11
+--- commons-io:commons-io:2.6
+--- org.apache.odftoolkit:simple-odf:0.8.2-incubating
| +--- org.apache.odftoolkit:odfdom-java:0.8.11-incubating
| | +--- org.apache.odftoolkit:taglets:0.8.11-incubating
| | +--- xerces:xercesImpl:2.9.1 -> 2.11.0
| | | \--- xml-apis:xml-apis:1.4.01
| | +--- xml-apis:xml-apis:1.3.04 -> 1.4.01
| | +--- org.apache.jena:jena-core:2.11.2
| | | +--- org.slf4j:slf4j-api:1.7.6 -> 1.7.22
| | | +--- org.apache.jena:jena-iri:1.0.2
| | | | +--- org.slf4j:slf4j-api:1.7.6 -> 1.7.22
| | | | \--- log4j:log4j:1.2.17
| | | +--- xerces:xercesImpl:2.11.0 (*)
| | | \--- log4j:log4j:1.2.17
| | +--- net.rootdev:java-rdfa:0.4.2
| | | +--- org.apache.jena:jena-iri:0.9.1 -> 1.0.2 (*)
| | | \--- org.slf4j:slf4j-api:1.5.6 -> 1.7.22
| | \--- commons-validator:commons-validator:1.5.0
| | +--- commons-beanutils:commons-beanutils:1.9.2
| | | +--- commons-logging:commons-logging:1.1.1 -> 1.2
| | | \--- commons-collections:commons-collections:3.2.1 -> 3.2.2
| | +--- commons-digester:commons-digester:1.8.1
| | +--- commons-logging:commons-logging:1.2
| | \--- commons-collections:commons-collections:3.2.2
| +--- xerces:xercesImpl:2.9.1 -> 2.11.0 (*)
| \--- xml-apis:xml-apis:1.3.04 -> 1.4.01
+--- org.apache.lucene:lucene-core:6.+ -> 6.6.2
+--- org.apache.lucene:lucene-analyzers-common:6.+ -> 6.6.2
| \--- org.apache.lucene:lucene-core:6.6.2
+--- org.apache.lucene:lucene-queryparser:6.+ -> 6.6.2
| +--- org.apache.lucene:lucene-core:6.6.2
| +--- org.apache.lucene:lucene-queries:6.6.2
| \--- org.apache.lucene:lucene-sandbox:6.6.2
+--- commons-io:commons-io:2.5 -> 2.6
\--- ch.qos.logback:logback-classic:1.2.1
+--- ch.qos.logback:logback-core:1.2.1
\--- org.slf4j:slf4j-api:1.7.22
您在控制台中看到的这个错误消息实际上与代码中使用的@slf4j
注释无关--它只是简化了将log
字段添加到类中的过程。您的问题是由类路径中发现的多个org.slf4j.impl.StaticloggerBinder
类引起的。要修复它,您必须首先使用以下方法检查依赖项树:
gradle dependencies --configuration runtime
它将显示所有依赖项的完整树。而不是跟踪哪个依赖项正在向类路径添加额外的记录器。正如您在注释中提到的,在您的示例中,它是org.apache.odftoolkit:simple-odf:0.8.2-watingating
添加log4j
依赖项。
知道您必须排除组org.slf4j
和log4j
的可传递依赖关系,这些依赖关系随org.apache.odftoolkit:simple-odf:0.8.2-wating
一起提供。在build.gradle
文件中定义此依赖项,如下所示:
compile ("org.apache.odftoolkit:simple-odf:0.8.2-incubating") {
exclude group: 'org.slf4j'
exclude group: 'log4j'
}
关于这个主题有几个问题,但我找不到一个与Groovy“AST”注释有关的问题。从表面上看,这不仅方便,而且根据日志级别给你有条件的执行。 在我的书Groovy in Action中,它说: 将Slf4j记录器作为静态最终组织注入。slf4j。将日志记录到类中,并使用org对其进行初始化。slf4j。伐木厂。getLogger(类)。LogBack框架使用SLF4J作为底层记录器,因此LogBack
我得到以下错误。似乎有多个日志记录框架绑定到SLF4J。不知道该怎么解决。非常感谢任何帮助。
我在运行java代码时遇到以下运行时异常。有人能帮我解决绑定冲突吗。
我在netbeans中有一个纯Java项目,我得到的警告是: 当然,我搜索了警告,但所有的答案都与用maven或pom.xml文件删除重复绑定有关。但是我没有pom.xml文件,也没有使用Maven。 那么如何排除绑定呢?
我不断得到错误:
我在其他问题中看到,通常此警告的解决方案是从导致此冲突的依赖项中排除slf4j,但我无法在我的项目中发现问题。 我运行命令,输出如下: