【问题标题】:How do I get logging output in IntelliJ using slf4j in my Gradle project?如何在我的 Gradle 项目中使用 slf4j 在 IntelliJ 中获取日志记录输出?
【发布时间】:2016-11-20 12:57:37
【问题描述】:

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

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

如果您熟悉 slf4j,就会知道 slf4j 的重点是避免在日志框架上声明编译时依赖项。

【问题讨论】:

  • 如果你正在编写一个可执行的应用程序,你声明你对你的日志实现的依赖。
  • @chrylis 我有理由想推迟这个决定。不过我明白你的意思。如果您认为不可能,请继续提交答案。
  • 为什么不配置一个控制台附加程序,或者根据底层实现可以调用什么?

标签: java logging intellij-idea gradle slf4j


【解决方案1】:

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

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

如果您希望在“运行项目”时“看到”某些东西,那么:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2012-07-23
    • 2016-06-23
    相关资源
    最近更新 更多