2012-07-30 89 views
1

我想提供一个客户端库,用于将休息请求包装到服务器并记录错误,以便客户端可以在他的应用程序中使用它并查看日志。 (也有一个问题,如果我只是记录错误或重新抛出它。当我使用异步调用(多线程)这可能是相当棘手..)外部库的日志记录策略(slf4j?)

我读slf4j可能有所帮助,因为客户,谁正在使用该库,可以选择他喜欢的日志框架。

Somethings困惑我这个slf4j东西。如果他得到我的库并且我只提供了,那么让我们说slf4j-api,错误将被抛出,导致SLF4J绑定不包括在内。解决方案可能是他必须自己包含绑定,而问题是他是否愿意阅读README以获取此重要信息。

如果我包含一个“标准”-slf4j绑定(例如简单的绑定),应用程序不能“覆盖”这个,因为在类路径中只允许有一个绑定。它不会是灵活的anymoe

所以我想只使用log4j,并忘记其他每个日志框架。我可能认为这个问题很复杂,也许有人可能会帮助我解决这个问题?

+0

你的客户库如何看起来像?它是包含一切(包括日志框架)的单个JAR文件还是包含您的库及其依赖项的归档文件? – 2012-07-30 18:46:31

+1

从版本1.6.0开始,如果在类路径上找不到绑定,则SLF4J将默认为无操作实现。因此,当在类路径中没有找到绑定时,slf4j-api本身没有抛出异常。 – Ceki 2012-07-30 20:16:35

回答

5

您必须记住,您的库不会设置包装应用程序的类路径。包装应用程序将设置一个包含你的库,slf4j API库和实现库的类路径。

包装应用程序将负责使用和设置所有日志参数的slf4j实现。您只需要担心使用slf4j API记录库事件。这是常见的做法,不要担心包装应用程序。

通过在您的库中包装log4j,您正在击败伐木立面的目的。这样做不会允许用户选择slf4j实现。