Kotlin的全球记录器

时间:2019-01-21 05:09:34

标签: logging kotlin singleton kotlin-companion

我目前正在科特林从事一个相对较大的项目。我想实现一个日志记录方法,但是由于许多原因(特别是因为我需要一种非常特定的时钟管理类型和各种各样的附加程序,这在其他框架中很难实现),因此我无法使用典型的日志记录框架,例如Log4J。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

private val logger = Logger(...)

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

这没有提供记录器的类名,但是如果需要,可以很容易地与您提到的Kotlin记录方案结合起来以解决此问题。