今天接到领导邮件要求整改系统输出日志规范,有一条要求调整输出日志时间格式为标题所述格式,例:2022-02-21 14:13:32,489
项目目前logback.xml里的配置是这样:
<pattern>%d{yyyyMMdd hh:mm:ss} [%p][%c][%M][%L]-> %m%n</pattern>
于是乎,简单搜索了一下毫秒的格式秒改成这样并启动
<pattern>%d{yyyy-MM-dd hh:mm:ss,SSS} [%p][%c][%M][%L]-> %m%n</pattern>
结果让然大跌眼镜,日志输出居然没有毫秒!
然后就是各种百度没有找到好的解决方案,只到我点开了logback-core:1.2.11版本的源码,具体就不细讲了,源码中按照yyyy-MM-dd hh:mm:ss,SSS中的逗号进行了分隔,然后.get(0),然后就剩下了yyyy-MM-dd hh:mm:ss
原因找到了,现在要想解决方案,紧接着在源码中看到了如下代码,对datePattern进行了空处理和特殊场景处理:
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 的
<pattern>%d [%p][%c][%M][%L]-> %m%n</pattern>
<pattern>%d{ISO8601} [%p][%c][%M][%L]-> %m%n</pattern>