编程语言
首页 > 编程语言> > java – 如何接收slf4j日志记录,仍然不依赖于记录后端?

java – 如何接收slf4j日志记录,仍然不依赖于记录后端?

作者:互联网

我使用SLF4J作为日志记录,让用户决定记录的位置和内容.现在发生崩溃,我想将一个文件发送到包含调试信息的服务器 – 这基本上就是一个日志文件.既然我们已经将所有日志语句分散在代码中,为什么不使用它们呢?

所以基本上,我想通过SLF4J以编程方式创建一个日志文件,对于仍然可以插入自己的日志后端和配置的用户来说是透明的.

我的第一个想法是实现org.slf4j.impl.StaticLoggerBinder,提供我自己的记录器实现,该记录器执行其日志记录,然后委托给用户配置的记录器.但是,我看到了一些问题:如果用户放置了正常的日志记录后端,那么org.slf4j.impl.StaticLoggerBinder的多个实例都在类路径上.这将发出警告,我可能无法确定,我的实现是被调用的.

有更好的解决方案吗?一个完全不同的方法?这个想法本身就不好吗?怎么做到这一点?

解决方法:

由于SLF4J是开源的,因此您可以将其修改为使用除org.slf4j.impl.StaticLoggerBinder之外的其他类.然后,您的自定义StaticLoggerBinder类可以加载原始的,用户提供的org.slf4j.impl.StaticLoggerBinder(如果存在).

另一个想法是在您的应用程序中使用自定义LoggerFactory(而不是org.slf4j.LoggerFactory),它返回一个Logger委托.此委托类委托日志记录方法调用原始Logger实现,并在必要时将日志发送到服务器.

无论如何,两者对我来说都是一个尴尬的黑客,创建两个工件(一个用于最终用户,另一个用于开发人员)闻起来更好.

(最后,我不知道它是什么类型的库/应用程序,但是在我的工作环境中,如果库将数据发送到第三方服务器是不可接受的.你确定你真的需要这样做吗? )

标签:java,logging,remote-debugging,slf4j
来源: https://codeday.me/bug/20190902/1790761.html