1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package net.sourceforge.acelogger.formatter;
16
17 import net.sourceforge.acelogger.LogEvent;
18 import net.sourceforge.acelogger.execution.LogController;
19 import net.sourceforge.acelogger.interpolator.JavaTextFormatInterpolator;
20 import net.sourceforge.acelogger.interpolator.TextInterpolator;
21
22
23
24
25
26
27
28
29 public class PatternFormatter extends BaseFormatter {
30
31 private boolean shouldPrintStackTrace;
32
33 private TextInterpolator formatInterpolator;
34
35 private String pattern;
36
37 public PatternFormatter(String identifier, String pattern) {
38 this(identifier, pattern, true);
39 }
40
41 public PatternFormatter(String identifier, String pattern, boolean shouldPrintStackTrace) {
42 this(identifier, pattern, shouldPrintStackTrace, JavaTextFormatInterpolator.getInstance(),
43 JavaTextFormatInterpolator.getInstance());
44 }
45
46 public PatternFormatter(String identifier, String pattern, boolean shouldPrintStackTrace,
47 TextInterpolator formatInterpolator, TextInterpolator messageInterpolator) {
48 super(identifier, messageInterpolator);
49 this.shouldPrintStackTrace = shouldPrintStackTrace;
50 this.formatInterpolator = formatInterpolator;
51 this.pattern = pattern;
52 }
53
54 public String formatLogCall(LogEvent call) {
55 String formattedCall = "";
56 Object[] params = new Object[] {};
57 try {
58 formattedCall = formatMessage(call.getMessage(), call.getMessageParameters());
59
60 params = new Object[] {
61 formattedCall,
62 call.getCallTime(),
63 call.getLevel(),
64 call.getLocation().getStackTraceLikeName()
65 };
66 formattedCall = formatInterpolator.interpolate(pattern, params);
67 if (shouldPrintStackTrace) {
68 formattedCall = formattedCall.concat(formatStackTrace(call.getCause()));
69 }
70 } catch (IllegalArgumentException e) {
71 LogController.getInternalLogger().error(
72 "It was not possible to format \"{0}\" with [{1}]", e, pattern, params);
73 }
74 return formattedCall;
75 }
76
77 }