|
33 | 33 |
|
34 | 34 | import java.io.PrintWriter;
|
35 | 35 | import java.io.StringWriter;
|
| 36 | +import java.util.EnumSet; |
36 | 37 |
|
37 | 38 | import org.scijava.log.LogLevel;
|
38 | 39 | import org.scijava.log.LogMessage;
|
|
44 | 45 | */
|
45 | 46 | public class LogFormatter {
|
46 | 47 |
|
| 48 | + public enum Field { |
| 49 | + TIME, LEVEL, SOURCE, MESSAGE, THROWABLE, ATTACHMENT |
| 50 | + } |
| 51 | + |
| 52 | + private EnumSet<Field> visibleFields = EnumSet.of(Field.TIME, |
| 53 | + Field.LEVEL, Field.SOURCE, Field.MESSAGE, Field.THROWABLE); |
| 54 | + |
| 55 | + public boolean isVisible(Field field) { |
| 56 | + return visibleFields.contains(field); |
| 57 | + } |
| 58 | + |
| 59 | + public void setVisible(Field field, boolean visible) { |
| 60 | + // copy on write to enable isVisible to be used concurrently |
| 61 | + EnumSet<Field> copy = EnumSet.copyOf(visibleFields); |
| 62 | + if (visible) copy.add(field); |
| 63 | + else copy.remove(field); |
| 64 | + visibleFields = copy; |
| 65 | + } |
| 66 | + |
47 | 67 | public String format(LogMessage message) {
|
| 68 | + try { |
| 69 | + final StringWriter sw = new StringWriter(); |
| 70 | + final PrintWriter printer = new PrintWriter(sw); |
| 71 | + |
| 72 | + if (isVisible(Field.TIME)) |
| 73 | + printWithBrackets(printer, message.time().toString()); |
| 74 | + |
| 75 | + if (isVisible(Field.LEVEL)) |
| 76 | + printWithBrackets(printer, LogLevel.prefix(message.level())); |
48 | 77 |
|
49 |
| - final StringWriter sw = new StringWriter(); |
50 |
| - final PrintWriter printer = new PrintWriter(sw); |
| 78 | + if (isVisible(Field.SOURCE)) |
| 79 | + printWithBrackets(printer, message.source().toString()); |
51 | 80 |
|
52 |
| - printWithBrackets(printer, message.time().toString()); |
53 |
| - printWithBrackets(printer, LogLevel.prefix(message.level())); |
54 |
| - printWithBrackets(printer, message.source().toString()); |
55 |
| - printer.println(message.text()); |
56 |
| - if (message.throwable() != null) |
57 |
| - message.throwable().printStackTrace(printer); |
| 81 | + if (isVisible(Field.ATTACHMENT)) { |
| 82 | + printer.print(message.attachments()); |
| 83 | + printer.print(" "); |
| 84 | + } |
58 | 85 |
|
59 |
| - return sw.toString(); |
| 86 | + if (isVisible(Field.MESSAGE)) printer.println(message.text()); |
| 87 | + |
| 88 | + if (isVisible(Field.THROWABLE) && message.throwable() != null) |
| 89 | + message.throwable().printStackTrace(printer); |
| 90 | + return sw.toString(); |
| 91 | + } |
| 92 | + catch (Exception e) { |
| 93 | + return "[Exception while formatting log message: " + e + "]\n"; |
| 94 | + } |
60 | 95 | }
|
61 | 96 |
|
62 | 97 | private void printWithBrackets(PrintWriter printer, String prefix) {
|
63 |
| - printer.print('['); |
64 |
| - printer.print(prefix); |
65 |
| - printer.print("] "); |
| 98 | + printer.append('[').append(prefix).append("] "); |
66 | 99 | }
|
67 |
| - |
68 | 100 | }
|
0 commit comments