1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.pattern;
18
19 import java.lang.management.ManagementFactory;
20
21 import org.apache.logging.log4j.core.LogEvent;
22 import org.apache.logging.log4j.core.config.plugins.Plugin;
23
24
25
26
27 @Plugin(name = "RelativeTimePatternConverter", category = PatternConverter.CATEGORY)
28 @ConverterKeys({ "r", "relative" })
29 public class RelativeTimePatternConverter extends LogEventPatternConverter {
30
31
32
33 private long lastTimestamp = Long.MIN_VALUE;
34 private final long startTime = ManagementFactory.getRuntimeMXBean().getStartTime();
35 private String relative;
36
37
38
39
40 public RelativeTimePatternConverter() {
41 super("Time", "time");
42 }
43
44
45
46
47
48
49
50 public static RelativeTimePatternConverter newInstance(
51 final String[] options) {
52 return new RelativeTimePatternConverter();
53 }
54
55
56
57
58 @Override
59 public void format(final LogEvent event, final StringBuilder toAppendTo) {
60 final long timestamp = event.getTimeMillis();
61
62 synchronized (this) {
63 if (timestamp != lastTimestamp) {
64 lastTimestamp = timestamp;
65 relative = Long.toString(timestamp - startTime);
66 }
67 }
68 toAppendTo.append(relative);
69 }
70 }