对于严格的ISO 8601合规性,使Logback在“%date”格式中包含日期和时间之间的“T”
默认情况下, Logback编码器使用类似于ISO 8601标准的日期格式 。 但它在日期和时间部分之间缺少“T”。 T
使得解析变得更容易,并且是标准所要求的(除非私人方达成一致)。
是否有一些技巧可以让Logback包含T
?
这个…
2006-10-20T14:06:49,812
而不是这个……
2006-10-20 14:06:49,812
我想我可以在添加“T”时重新创建整个格式,但我想知道是否有更简单的方法。
错误报告
在Logback的JIRA页面上有关于此的错误报告。 自24/Feb/10 3:57 PM
以来没有太多发展。 我刚投票吸引了注意力。 你也应该。
我会提供与ISO 8601相匹配的自己的日期格式。
插入“T”
这应该是诀窍:
%d{"yyyy-MM-dd'T'HH:mm:ss,SSS"} [%thread] %-5level %logger{35} - %msg %n
需要使用""
,按照文档中的描述进行操作。
元素属于Logback配置设置。 这是一个示例logback.xml
文件:
%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} [%thread] %-5level %logger{36} - %msg%n
时区
为了更加完全符合ISO 8601标准,并且为了更有用的日志记录,您应该包含一个时区。
编辑(Michael-O,2014-06-15):事实并非如此,时区是绝对可选的。
要包含时区,请将第二个参数( 请参阅doc )传递给%date
。 传递时区的正确名称 。 避免使用三个或四个字母的时区代码,例如“EST”,因为它们既不是唯一的也不是标准化的。 例如,通过Australia/Perth
。 通常,对于日志记录,我们需要UTC (GMT)时间,这意味着没有任何偏移。 在这种情况下,传递UTC
。
您可以将时区偏移量显示为小时和分钟数,作为日志中日期时间的一部分。 附加X
以显示时区偏移量作为日期时间值的一部分。
这个…
%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC}
… …产生
2014-04-16T09:59:24,009Z
XXX
适用于Java 7和8.在早期版本的Java中,您可以在格式定义中使用Z
来生成缺少冒号的偏移号。