0

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

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

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

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

4

1 回答 1

3

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

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

private val logger = Logger(...)

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

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

于 2019-01-21T08:22:56.127 回答