默认情况下,Logback编码器使用 date format类似于 ISO 8601标准。但它在日期和时间部分之间缺少“T”。 T
使解析更容易,并且是标准要求的(除非私有(private)各方另有约定)。
让 Logback 包含 T
有什么技巧吗?
这……
2006-10-20T14:06:49,812
而不是这个……
2006-10-20 14:06:49,812
我想我可以在添加“T”的同时重新创建整个格式,但我想知道是否有更简单的方法。
最佳答案
错误报告
Logback's JIRA page 上有一个关于此的错误报告。 .自从 24/Feb/10 3:57 PM
以来没有太大的发展.我刚刚投票是为了引起注意。你也应该这样做。
我会提供我自己的与 ISO 8601 匹配的日期格式的。
插入“T”
这应该可以解决问题:
<pattern>%d{"yyyy-MM-dd'T'HH:mm:ss,SSS"} [%thread] %-5level %logger{35} - %msg %n
</pattern>
""
需要制作 ,
按照 documentation 中的描述工作.
那个 <pattern>
元素属于您的 Logback 配置设置。这是一个示例logback.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- Strangely, Logback lacks a built-in formatter for ISO 8601. So, roll our own. -->
<Pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="com.example" level="TRACE"/>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
时区
为了更全面地符合 ISO 8601 标准并获得更有帮助的日志记录,您应该包含一个时区。
编辑(Michael-O,2014-06-15):那不是正确的,时区是绝对可选的。
要包含时区,请将第二个参数 (see doc) 传递给 %date
.通过proper name of a time zone .避免使用三个或四个字母的时区代码,例如“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
在格式定义中生成一个缺少冒号的偏移量。
关于java - 使 Logback 在其 "T"格式中包含日期和时间之间的 "%date"以严格遵守 ISO 8601,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096129/