我的项目使用handlebars-proto将模板绑定到json。此外,我正在尝试使用logstash-logback-encoder以Json的形式登录logstash。下面是我的编译依赖项(以及其他依赖项)
compile 'net.logstash.logback:logstash-logback-encoder:4.6'
compile 'com.github.jknack:handlebars-proto:4.0.5'
如果删除把手,依赖项日志记录工作正常。如果有把手,我会收到以下警告:
SLF4J:类路径包含多个SLF4J绑定。 SLF4J:找到了 绑定 [罐:文件:/ C:/Users/manish/.gradle/caches/modules-2/files-2.1/com.github.jknack/handlebars-proto/4.0.5/5979737344d99e0d8b482e828f247ae86fd0113/handlebars-proto-4.0.5。罐子!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:发现绑定 [罐:文件:/ C:/Users/manish/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.1.6/665e3de72f19ec66ac67d82612d7b8e6b3de3cd0/logback-classic-1.1.6。罐子!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:请参阅http://www.slf4j.org/codes.html#multiple_bindings 解释
后面是错误:
无法实例化[ch.qos.logback.classic.LoggerContext]报告 例外: java.lang.NoSuchMethodError:ch.qos.logback.core.spi.ContextAwareBase。(Lch / qos / logback / core / spi / ContextAware;)V 在 net.logstash.logback.composite.CompositeJsonFormatter。(CompositeJsonFormatter.java:106) 在 net.logstash.logback.composite.loggingevent.LoggingEventCompositeJsonFormatter。(LoggingEventCompositeJsonFormatter.java:28) 在 net.logstash.logback.LogstashFormatter。(LogstashFormatter.java:122) 在 net.logstash.logback.LogstashFormatter。(LogstashFormatter.java:118) 在 net.logstash.logback.LogstashFormatter。(LogstashFormatter.java:114) 在 net.logstash.logback.encoder.LogstashEncoder.createFormatter(LogstashEncoder.java:31) 在 net.logstash.logback.encoder.CompositeJsonEncoder。(CompositeJsonEncoder.java:48) 在 net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder。(LoggingEventCompositeJsonEncoder.java:23) 在 net.logstash.logback.encoder.LogstashEncoder。(LogstashEncoder.java:27) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 在java.lang.Class.newInstance(Class.java:379)at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.begin(NestedComplexPropertyIA.java:122) 在 ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276) 在 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:148) 在 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130) 在 ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
我尝试将slf4j排除在把手的传递依赖之外 它没有帮助。
compile
('com.github.jknack:handlebars-proto:4.0.5'){
exclude module: 'slf4j-api'
}
提前感谢您的帮助。如果需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
错误消息是因为handlebars-proto jar包含level_0 index ID date_time value
54967 54967 54967 1/06/2016 19:30 1.00
54968 54968 54968 1/06/2016 19:30 2.00
的实现,这意味着它具有日志记录实现。您还尝试添加自己的Logback日志记录实现,由于SLF4J不能同时使用两个日志系统,因此抱怨。
我不熟悉把手项目,但我猜你在那里的库是一个包含日志记录系统的完整应用程序,而不是真的被设计为被另一个用作依赖项项目。也许只有库可以使用不同的版本,而且它并没有尝试包含自己的日志记录实现?