【问题标题】:Logging-Strategy (slf4j?) for external libraries外部库的日志记录策略(slf4j?)
【发布时间】:2012-07-30 14:46:08
【问题描述】:

我想提供一个客户端库,用于将 rest-request 包装到服务器并记录错误,以便客户端可以在他的应用程序中使用它并查看日志。 (还有一个问题是我应该只记录错误还是重新抛出它。当我使用异步调用(多线程)时,这可能会很棘手..)

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

有些东西让我对这个 slf4j 的东西感到困惑。如果他得到我的库,而我只是提供,假设是 slf4j-api,则会引发错误,导致不包括 SLF4J 绑定。解决方案可能是他必须自己包含绑定,问题是他是否愿意阅读自述文件以获取这些重要信息。

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

所以我想只使用 log4j 而忘记所有其他日志记录框架。我可能想在这个问题上变得复杂,也许有人可以帮助我解决这个问题?

【问题讨论】:

  • 您的客户端库看起来如何?它是包含所有内容(包括日志框架)的单个 JAR 文件,还是包含您的库及其依赖项的存档?
  • 从 1.6.0 版本开始,如果在类路径上找不到绑定,则 SLF4J 将默认为无操作实现。因此,slf4j-api 本身不会在类路径上找不到绑定时抛出异常。

标签: java logging jar log4j slf4j


【解决方案1】:

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

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

通过在你的库中打包 log4j,你违背了日志外观的目的。这样做将不允许用户选择 slf4j 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2012-08-26
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多