我目前正在 Kotlin 做一个相对较大的项目。我想实现一种日志记录方法,但是由于多种原因(特别是因为我需要一种非常特定类型的时钟管理和各种各样的附加器,这在其他框架中实现会很痛苦),我不能使用典型的日志记录框架,如 Log4J。
我希望 - 如果可能的话 - 能够从所有类进行记录,而无需显式地传递给它们 Logger 对象。我喜欢 Kotlin 日志记录提供的日志记录方案(使用配套对象),但它使用现有的框架,这是不行的。
在某种程度上,我需要的是某种定义全局记录器的方法。有什么建议吗?单例和配套对象可能是解决方案的一部分,但我真的不知道如何构建方便的东西。
注意:我需要其中一个追加器来写入 ZMQ,所以我宁愿避免实例化多个记录器。
您只需为记录器定义一个顶级私有 val,并从同一文件中的函数访问它:
// Logging.kt
private class Logger(...) { ... }
private val logger = Logger(...)
fun log_debug(message: String) = logger.debug(message)
// etc.
这没有提供记录器的类名,但如果需要,可以简单地与您提到的 Kotlin 日志记录方案结合使用来解决此问题。