Java 如何将扩展SLF4J与Logback一起使用
我们扩展了SLF4J的Java 如何将扩展SLF4J与Logback一起使用,java,logback,slf4j,Java,Logback,Slf4j,我们扩展了SLF4J的LoggerAPI,并创建了AppLogger接口。我们必须这样做,因为我不能在这里透露某些需要。现在,我们希望将此扩展记录器与LogBack框架一起使用。我找不到任何机制来让它工作。直接使用是抛出ClassCastException(这很明显,因为它需要一个名为Logger的类,并获取AppLogger) 通过编写桥接实现并提供自定义的StaticBinder类,我能够使这个扩展接口与log4j1.x和log4j2.x一起工作。对于LogBack,这个桥类(StaticB
Logger
API,并创建了AppLogger
接口。我们必须这样做,因为我不能在这里透露某些需要。现在,我们希望将此扩展记录器与LogBack框架一起使用。我找不到任何机制来让它工作。直接使用是抛出ClassCastException
(这很明显,因为它需要一个名为Logger
的类,并获取AppLogger
)
通过编写桥接实现并提供自定义的StaticBinder
类,我能够使这个扩展接口与log4j1.x
和log4j2.x
一起工作。对于LogBack,这个桥类(StaticBinder
)是logbackclassic
JAR文件的一部分,所以我不知道如何编写自己的binder和桥LogBack
AppLogger
界面如下所示:
public interface AppLogger extends org.slf4j.Logger {
public void myOwnMethod(String message, Object... args);
}
感谢任何人提供任何想法。1.7.15版之前的SLF4J绑定机制过去非常简单。在版本1.7.15之后,随着事件重播的引入,机制变得更加复杂,但核心绑定思想仍然简单。此外,对于那些不会被打扰的人来说,任何对事件重播的支持都可以安全地省略 有关slf4j绑定的示例,请参阅slf4j nop或slf4j简单模块中的代码
但是,从我收集的信息来看,您希望使用扩展的Logger API,在这种情况下,您应该查看slf4j ext模块中的
LoggerWrapper
、XLogger
和XLoggerFactory
类。您应该能够轻松地为您的AppLogger
接口模拟相同的过程。版本1.7.15之前的SLF4J绑定机制过去非常简单。在版本1.7.15之后,随着事件重播的引入,机制变得更加复杂,但核心绑定思想仍然简单。此外,对于那些不会被打扰的人来说,任何对事件重播的支持都可以安全地省略
有关slf4j绑定的示例,请参阅slf4j nop或slf4j简单模块中的代码
但是,从我收集的信息来看,您希望使用扩展的Logger API,在这种情况下,您应该查看slf4j ext模块中的
LoggerWrapper
、XLogger
和XLoggerFactory
类。您应该能够轻松地为您的AppLogger
接口模拟相同的过程。@Raedwald,我已经编辑了我的问题以添加扩展接口。我必须添加更多的特定于应用程序的日志记录方法。我也理解你延长LogBack的意思。我知道我必须提供一个等价于ch.qos.logback.classic.Logger的实现,它将扩展我的AppLogger
,但在这种情况下,我必须为logback classic
JAR中的所有类提供代码。我想不出任何其他的主意。如果您有不同的想法,请提出建议。我很难想象您为什么需要扩展core Logger接口来完成一些无法通过标记、MDC或其他内置机制完成的事情。您最好不要修改Logger接口,而只提供自己的方法,所有类都可以静态导入。@Raedwald,我已经编辑了我的问题,添加了扩展接口。我必须添加更多的特定于应用程序的日志记录方法。我也理解你延长LogBack的意思。我知道我必须提供一个等价于ch.qos.logback.classic.Logger的实现,它将扩展我的AppLogger
,但在这种情况下,我必须为logback classic
JAR中的所有类提供代码。我想不出任何其他的主意。如果您有不同的想法,请提出建议。我很难想象您为什么需要扩展core Logger接口来完成一些无法通过标记、MDC或其他内置机制完成的事情。最好不要修改Logger接口,而只是提供自己的方法,让所有类都静态导入。