Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java库记录器_Java_Logging_Packaging - Fatal编程技术网

Java库记录器

Java库记录器,java,logging,packaging,Java,Logging,Packaging,我正在编写一个库,它收集了我将在不同应用程序中使用的各种函数。我希望它生成对库用户可见的日志语句,也就是说,如果我正在构建应用程序并且正在使用库,我希望库生成对我可见的日志语句。我该怎么做?由于日志文件将由应用程序的开发人员配置,我的库如何知道如何记录?日志文件的位置在日志框架配置中设置在包外部。 配置文件通常位于类路径上。它的外观取决于您使用的日志框架-我建议使用和 这方面的标准解决方案是: Log4J: SLF4J: JDK内置记录器: 所有这些都允许您通过配置配置日志文件位置。如果您正

我正在编写一个库,它收集了我将在不同应用程序中使用的各种函数。我希望它生成对库用户可见的日志语句,也就是说,如果我正在构建应用程序并且正在使用库,我希望库生成对我可见的日志语句。我该怎么做?由于日志文件将由应用程序的开发人员配置,我的库如何知道如何记录?

日志文件的位置在日志框架配置中设置在包外部。
配置文件通常位于类路径上。它的外观取决于您使用的日志框架-我建议使用和

这方面的标准解决方案是:

  • Log4J:
  • SLF4J:
  • JDK内置记录器:

所有这些都允许您通过配置配置日志文件位置。

如果您正在开发库,其他库将包括在其应用程序中,您应该使用日志外观。否则,您将强制库的用户在为其应用程序选择的框架之外配置并包括您选择的日志框架

例如,如果您使用log4j,但使用库的开发人员使用logback,他将必须包含一个log4j配置文件和log4j jar(或take),以使库满意

日志Facades解决了这个问题(来自Apache Commons日志):

在编写库时,记录信息非常有用。但是,有许多日志记录实现,并且库不能将特定的日志记录应用于该库所属的整个应用程序

日志记录包是不同日志记录实现之间的超薄桥梁。使用commons日志API的库可以在运行时与任何日志实现一起使用。Commons日志记录支持许多流行的日志记录实现,为其他日志记录实现编写适配器是一项相当简单的任务

或者SLF4J的推理:

Java或(SLF4J)的简单日志外观作为各种日志框架的简单外观或抽象,例如Java.util.Logging、log4j和logback,允许最终用户在部署时插入所需的日志框架

记录正面的候选对象包括:


就我个人而言,我建议(使用)。

看看Spring框架。具体来说,依赖注入功能是对您最有用的部分。您的示例具有误导性。开发人员可以同时为is代码使用SLF4J API,为第三方使用log4j适配器。然后他只选择一些SLF4J后端,比如logback。事实上,这就是SLF4J的一个原因,它很简单。不需要log4j配置。@RostislavMatl您是说SLF4J“桥接模块”()吗?这些允许您使用使用log4j的库,。。。并将其日志消息重定向到SLF4J(可能由logback支持)。如果您是库的用户,这当然是一个很好的特性。然而,当你是一个库的开发者时,你为什么要强迫你的用户跳过这样的障碍呢?为什么不直接使用门面呢?正如SLF4J页面所述,这些解决方案“适用于您无法控制的软件”。如果我误解了你,请纠正我。显然我们谈论的是不同的事情。您写道:“如果您使用log4j,但是使用您的库的开发人员使用logback,那么他必须包括log4j配置”——这不是事实。同时,这也是一个糟糕的解决方案。我没有告诉您在开发新代码时不能使用SLF4J。我之所以选择库用户点或视图,是因为你通常是用户而不是创建者。@RostislavMatl啊,现在我明白了。我写了“他必须包括”,你是说还有其他解决方案,即桥接模块。关于观点,我认为OP是从库创建者的角度写的,因此我的答案也是这样写的。@RostislavMatl我已经更新了我的答案,并添加了到桥接模块的链接。然而,我不想过分强调这一点,因为我认为开发新库的最佳方法仍然是直接使用facade。你同意吗?