Handlebars-proto和logstash-logback-encoder slf4j冲突

时间:2016-06-02 17:45:08

标签: json logback logstash-logback-encoder handlebars.java

我的项目使用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' 

 }

提前感谢您的帮助。如果需要更多详细信息,请与我们联系。

1 个答案:

答案 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不能同时使用两个日志系统,因此抱怨。

我不熟悉把手项目,但我猜你在那里的库是一个包含日志记录系统的完整应用程序,而不是真的被设计为被另一个用作依赖项项目。也许只有库可以使用不同的版本,而且它并没有尝试包含自己的日志记录实现?