为什么我们只需要在控制器级别指定logger ?



我注意到在控制器级别指定一个记录器就足够了。

import ...
val logger = KotlinLogging.logger { }
@RestController

后续服务可以访问该记录器,而无需为自己指定记录器。

换句话说,如果一个服务抱怨不能调用logger.info {"..."},那么将val logger = KotlinLogging.logger { }添加到该服务的调用控制器中就足够了。

为什么?

当您创建这样的变量时,您基本上是在创建一个可以从代码中的任何地方访问的顶级变量。这就是为什么如果你把它添加到控制器,服务将能够使用它。

然而,这并不意味着你应该这样做。创建KotlinLogger的推荐方法是使用伴侣对象,如下所示:

import ...
@RestController
class WhateverController {
companion object {
private val logger = KotlinLogging.logger {}
}
}

这意味着您将为每个类设置一个日志记录器,正如您应该的那样。

我必须更新这个,因为Jaoa所说的the preferred way不是开发人员自己说的:

https://github.com/MicroUtils/kotlin-logging/wiki obtaining-a-logger

The preferred way to obtain a logger is as follows:
// Place definition above class declaration, below imports, 
// to make field static and accessible only within the file
private val logger = KotlinLogging.logger {}