关于领导要求logback日志时间格式要求为“年-月-日 时:分:秒,毫秒”

今天接到领导邮件要求整改系统输出日志规范,有一条要求调整输出日志时间格式为标题所述格式,例:2022-02-21 14:13:32,489

项目目前logback.xml里的配置是这样:

%d{yyyyMMdd hh:mm:ss} [%p][%c][%M][%L]-> %m%n

于是乎,简单搜索了一下毫秒的格式秒改成这样并启动

%d{yyyy-MM-dd hh:mm:ss,SSS} [%p][%c][%M][%L]-> %m%n

结果让然大跌眼镜,日志输出居然没有毫秒!

关于领导要求logback日志时间格式要求为“年-月-日 时:分:秒,毫秒”_第1张图片

然后就是各种百度没有找到好的解决方案,只到我点开了logback-core:1.2.11版本的源码,具体就不细讲了,源码中按照yyyy-MM-dd hh:mm:ss,SSS中的逗号进行了分隔,然后.get(0),然后就剩下了yyyy-MM-dd hh:mm:ss

关于领导要求logback日志时间格式要求为“年-月-日 时:分:秒,毫秒”_第2张图片

原因找到了,现在要想解决方案,紧接着在源码中看到了如下代码,对datePattern进行了空处理和特殊场景处理:

关于领导要求logback日志时间格式要求为“年-月-日 时:分:秒,毫秒”_第3张图片

public static final String ISO8601_PATTERN = "yyyy-MM-dd HH:mm:ss,SSS";

public static final String ISO8601_STR = "ISO8601";

 最后结合常量和代码逻辑,解决方案就清晰了,大家也都能看懂这段简单的判断。

当%d{    }里面是“ISO8601”或者%d后面什么都不写的时候,日期格式默认就是2022-02-21 14:13:32,489 的

%d [%p][%c][%M][%L]-> %m%n

%d{ISO8601} [%p][%c][%M][%L]-> %m%n

你可能感兴趣的:(logback,java)