对于严格的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来生成缺少冒号的偏移号。