【问题标题】:Global logger in KotlinKotlin 中的全局记录器
【发布时间】:2019-01-21 16:22:56
【问题描述】:

我目前正在 Kotlin 中从事一个相对较大的项目。我想实现一个日志记录方法,但是由于很多原因(特别是因为我需要一种非常特定类型的时钟管理和各种各样的附加程序,这在其他框架中实现起来会很痛苦),我不能使用典型的日志记录框架,比如日志4J。

如果可能的话,我希望能够从所有类进行日志记录,而无需显式地向它们传递 Logger 对象。我喜欢 Kotlin-logging 提供的日志记录方案(使用伴随对象),但它使用现有的框架,这是不行的。

在某种程度上,我需要的是某种方式来定义一个全局记录器。有什么建议吗?单例和伴随对象可能是解决方案的一部分,但我真的不知道如何构建方便的东西。

注意:我需要一个 appender 来写入 ZMQ,所以我宁愿避免实例化多个记录器。

【问题讨论】:

  • 是否适用于特定框架(Spring、Android、...)?
  • 并非如此,我正在从头开始构建自己的解决方案。我没有使用特定的框架(我使用的是 JVM)。
  • 如果我理解正确,您可以在文件中创建一个函数(没有类)。在这个函数中初始化记录器,并从任何类调用这个函数。
  • 这确实是一个想法。让我试试……

标签: logging kotlin singleton kotlin-companion


【解决方案1】:

您可以为记录器定义一个顶级私有 val 并从同一文件中的函数访问它:

// Logging.kt
private class Logger(...) { ... }

private val logger = Logger(...)

fun log_debug(message: String) = logger.debug(message) 
// etc.

这没有提供记录器的类名,但如果需要,它应该很容易与您提到的 Kotlin 记录方案相结合以解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多