SLF4J日志输出
最近在用kotlin
和vertx
写项目,程序日志是很常见的需求。本文介绍在vertx
中slf4j-simple
的使用。
vertx废弃自带日志API
vertx
4.0 之后弃用了它自带的在io.vertx.core.logging.LoggerFactory
下面的logging,所以如果你这样写的话会有废弃提示,原因是官方不再维护自带的logging库了。
所以,需要自己选择合适的日志库,我这里采用的是slf4j
引入
在build.gradle.kts
的dependencies
中添加依赖
implementation("org.slf4j:slf4j-simple")
因为vertx
已经依赖了org.slf4j:slf4j-api
所以不再需要添加,如果是其他类型的项目需要将implementation("org.slf4j:slf4j-api")
一起添加到依赖中。
使用
代码中导入org.slf4j.LoggerFactory
并使用它的getLogger
来取得实例
import org.slf4j.LoggerFactory
class MainVerticle : AbstractVerticle() {
companion object {
val logger = LoggerFactory.getLogger(MainVerticle::class.java)!!
}
}
配置
可以使用系统属性(如JVM启动参数中指定),也可以在src/main/resources
中添加simplelogger.properties
属性文件来指定(文件名必须写对)。示例配置如下:
org.slf4j.simpleLogger.logFile=System.out
org.slf4j.simpleLogger.log.com.zhaoxinsoft=debug
org.slf4j.simpleLogger.showDateTime=true
org.slf4j.simpleLogger.dateTimeFormat=MM-dd HH:mm:ss:SSS
#org.slf4j.simpleLogger.showShortLogName=true
org.slf4j.simpleLogger.showThreadName=false
org.slf4j.simpleLogger.levelInBrackets=true
org.slf4j.simpleLogger.log.org.mongodb=error
#这是一个备注行,备注的行不会生效
可配置的属性和解释如下(参考来源):
org.slf4j.simpleLogger.logFile
- 输出目标,可以是文件的路径,也可以是特殊值 "System.out" 和 "System.err"。默认值是 "System.err"。org.slf4j.simpleLogger.cacheOutputStream
- 如果输出目标设置为 "System.out" 或 "System.err"(见上条目),默认情况下,日志将输出到System.out/err
变量的最新值。通过将此参数设置为 true,输出流将被缓存,即在初始化时分配一次,并独立于当前引用的System.out/err
值重复使用。org.slf4j.simpleLogger.defaultLogLevel
- 所有 SimpleLogger 实例的默认日志级别。必须是 "trace"、"debug"、"info"、"warn"、"error" 或 "off" 之一。如果未指定,则默认为 "info"。越靠右级别越高,更高级别时,低级别的日志就不会打印,所以默认情况下,"debug"和"trace"都不会输出。org.slf4j.simpleLogger.log.a.b.c
- 名为 "a.b.c" 的 SimpleLogger 实例的日志详细级别。右侧的值必须是 "trace"、"debug"、"info"、"warn"、"error" 或 "off" 之一。当名为 "a.b.c" 的 SimpleLogger 实例初始化时,其级别将从此属性中分配。如果未指定,将使用最近的父日志记录器的级别,如果没有设置,则使用org.slf4j.simpleLogger.defaultLogLevel
指定的值。org.slf4j.simpleLogger.showDateTime
- 如果希望在输出消息中包含当前日期和时间,请设置为true
。默认值是false
。org.slf4j.simpleLogger.dateTimeFormat
- 输出消息中使用的日期和时间格式。描述日期和时间格式的模式由SimpleDateFormat
定义。如果未指定格式或格式无效,将输出自启动以来的毫秒数。org.slf4j.simpleLogger.showThreadName
- 如果希望输出当前线程名称,请设置为true
。默认值是true
。- (自 1.7.33 和 2.0.0-alpha6 版本以来)
org.slf4j.simpleLogger.showThreadId
- 如果希望输出当前线程 ID,请设置为true
。默认值是false
。 org.slf4j.simpleLogger.showLogName
- 如果希望在输出消息中包含日志记录器实例名称,请设置为true
。默认值是true
。org.slf4j.simpleLogger.showShortLogName
- 如果希望在输出消息中包含名称的最后一个组件,请设置为true
。默认值是false
。org.slf4j.simpleLogger.levelInBrackets
- 日志级别字符串是否应放在中括号中输出?默认值是false
。org.slf4j.simpleLogger.warnLevelString
- 警告级别输出的字符串值。默认值是WARN
。
注意
如果在JVM启动参数中和属性文件中同时指定相同的属性名,JVM中指定的属性会具有更高优先级,比如:
java -Dorg.slf4j.simpleLogger.log.com.zhaoxinsoft=trace
使用 Grep Console
如果是用了IDEA,想要用颜色区分不同级别的日记,可以使用Grep Console
插件,配置参考如下图,前提是设置org.slf4j.simpleLogger.logFile=System.out
最终效果
如下图所示