Kotlin-logging是否支持自定义任意日志名称?如何实现?
Kotlin-logging自定义日志名称问题解答
结论
Kotlin-logging完全允许指定任意自定义日志名称,之前日志失效的原因并非API用法错误,而是Logback配置未对自定义名称的日志器启用输出。
问题根源
你的Logback配置仅对默认的类/包级日志器(通过KotlinLogging.logger {}自动生成的、关联当前类全限定名的日志器)生效,但自定义名称的日志器(如"FOO")未被配置日志级别和输出目标,导致日志被过滤或无输出渠道。
解决步骤
1. 修改Logback配置文件(logback.xml)
在配置中添加针对自定义日志名称的日志器规则,确保它能输出到控制台:
<!-- 保持原有的控制台appender配置不变 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- 为自定义日志名称"FOO"配置日志输出 --> <logger name="FOO" level="INFO" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <!-- 根日志器配置(保留原有即可) --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root>
level="INFO":指定该日志器输出INFO及以上级别的日志,可根据需求调整为DEBUG、WARN等。additivity="false":防止该日志器的日志同时输出到根日志器(避免重复打印),若需要双重输出可设为true。
2. 正确使用自定义日志名称的写法
以下两种写法都是有效的,配置完成后即可正常输出日志:
// 直接使用Kotlin-logging的API指定名称 val log = KotlinLogging.logger("FOO") // 通过SLF4J LoggerFactory转换为KLogger val log = LoggerFactory.getLogger("FOO").toKLogger()
验证说明
- 调整配置后,自定义名称的日志器会按照配置的级别输出到控制台,不会再出现失效情况。
- 应用中其他原有日志功能不受影响,因为根日志器和类级日志器的配置依然生效。
内容的提问来源于stack exchange,提问作者user891203
相关产品推荐
相关产品推荐

