如何在我的 Gradle 项目中使用 slf4j 在 IntelliJ 中获取日志输出?

How do I get logging output in IntelliJ using slf4j in my Gradle project?

我正在开始一个 java 项目,使用 slf4j 进行日志记录,gradle 进行构建,使用 intellij 进行 IDE。当我 运行 项目时,如何让 intellij 在 IDE 中显示日志?

我一直在尝试找出如何将 slf4j-simple 放入类路径中而不在 build.gradle 中声明它。我认为将日志输出到 System.err 会使它们显示在 intellij 中。你认为这是在正确的轨道上吗?

如果您熟悉 slf4j,就会知道 slf4j 的目的是避免声明对日志记录框架的编译时依赖性。

为了显示输出,类路径中需要同时存在 slf4j-api 以及恰好一个 slf4j 实现绑定(例如 slf4j-simple 或 logback 或其他)。这意味着:

  • 如果您正在编写某种库(供您维护的其他模块内部使用,或者 "for the public"),您应该只依赖 slf4j-api 而不要编译- 或 运行时间声明的实现绑定依赖。
  • 如果您正在编写一些最终应用程序,则需要包括实现绑定依赖项,尽管它可能是 运行时间范围的而不是编译范围的。

如果您在 "run the project" 时期望 "see" 某些东西,那么:

  1. 这是某种库,您正在对您的库进行某种单元或集成测试,因此您应该在 中包含实现绑定依赖项(如 slf4j-simple) testing 类路径(以便您在测试时看到输出,但它不会被依赖于您的库的任何东西使用)。或者,
  2. 这是某种终端应用程序,因此应该有一个在编译或 运行时间范围内定义的实现绑定依赖项。如果您不确定最终要使用什么,没关系,只需选择现在使用的可以简单记录到控制台的东西,因为 SLF4J 可以在以后轻松替换它。许多日志记录框架很容易支持 "production" 的单独配置而不是测试,我认为让测试配置基本上只记录到控制台是相当普遍的。

IntelliJ IDEA 将自动显示打印到控制台的任何内容。此外,许多 运行 配置类型都有一个 "Log" 选项卡,可让您指定要扫描的日志文件,并在应用程序 运行 时显示。因此,如果您确实想要一个记录到多个文件等的测试日志记录配置,您通常可以将 IDEA 配置为能够让您在应用程序 运行ning.

我对 Maven 的经验比 Gradle 多得多,但我相信编译、运行时间和测试的依赖范围的概念可以相当直接地转换为 Gradle。请询问您是否需要更具体的说明。