log4j:当前时间,以毫秒为单位

ali*_*mon 16 java log4j

log4j.properties我可以设置PatternLayout例如("[%p] %c - %m - %d %n")

是否有任何符号(%something)以毫秒为单位返回当前时间?

tur*_*nan 22

你可以尝试这个.

log4j.appender.appender_name.layout=org.apache.log4j.PatternLayout
log4j.appender.appender_name.layout.ConversionPattern=%d %p [%c] - %m%n
Run Code Online (Sandbox Code Playgroud)

日期参数%d.例如:%d{HH:mm:ss,SSS}.

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

  • 不要使用PatternLayout!充满了并发性问题,并不总是喜欢异常声明.答案是EnhancedPatternLayout. (4认同)

pca*_*cao 20

没有Log4J符号完全符合您的要求.

%d返回具有给定模式的当前日期,由a SimpleDateFormat(您在括号之间放置的模式)定义,但不以millis为单位给出时间.

%r给出自执行开始以来的毫秒数.

实现你想要的一种可能的方法是扩展Log4j的行为,这是相当复杂的,但如果它是绝对必要的......在这里你去:

自定义log4j(编辑:不再在线?)
自定义log4j(编辑:2018替代)

编辑:请记住,从您的评论中,如果您需要确定不同机器中执行之间的时间差异,您必须确保机器的时钟同步,否则它将导致错误的结论.

  • 我不同意这是不可能的.%d符号实际上作为默认值显示毫秒,而您可以将其配置为关闭它.截止时间:2012年8月1日17:41:53,357.使用的符号:%d {dd MMM yyyy HH:mm:ss,SSS} (11认同)
  • 日期是毫秒的一部分,而不是以毫秒为单位的日期。完全不同。从最初的问题开始,OP要求的是一种以*毫秒为单位打印时间戳的方法。请在投票之前阅读。 (2认同)

Sai*_*Aye 10

试试这个,

   %d{dd MMM yyyy HH:mm:ss,SSS}
Run Code Online (Sandbox Code Playgroud)


the*_*eko 5

您应该能够使用手册%d{UNIX_MILLIS}中的内容:

%d{UNIX}输出 UNIX 时间(以秒为单位)。%d{UNIX_MILLIS}输出 UNIX 时间(以毫秒为单位)。UNIX 时间是当前时间与 UTC 时间 1970 年 1 月 1 日午夜之间的差值(对于 UNIX,以秒为单位,对于 UNIX_MILLIS 以毫秒为单位)。虽然时间单位是毫秒,但粒度取决于操作系统 (Windows)。这是输出事件时间的有效方法,因为只发生从 long 到 String 的转换,不涉及日期格式。