|
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 |
|
47 |
| - public String format(LogMessage message) { |
| 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 | + } |
48 | 66 |
|
| 67 | + public String format(LogMessage message) { |
49 | 68 | final StringWriter sw = new StringWriter();
|
50 | 69 | final PrintWriter printer = new PrintWriter(sw);
|
51 | 70 |
|
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) |
| 71 | + if (isVisible(Field.TIME)) |
| 72 | + printWithBrackets(printer, message.time().toString()); |
| 73 | + |
| 74 | + if (isVisible(Field.LEVEL)) |
| 75 | + printWithBrackets(printer, LogLevel.prefix(message.level())); |
| 76 | + |
| 77 | + if (isVisible(Field.SOURCE)) |
| 78 | + printWithBrackets(printer, message.source().toString()); |
| 79 | + |
| 80 | + if (isVisible(Field.ATTACHMENT)) { |
| 81 | + printer.print(message.attachments()); |
| 82 | + printer.print(" "); |
| 83 | + } |
| 84 | + |
| 85 | + if (isVisible(Field.MESSAGE)) printer.println(message.text()); |
| 86 | + |
| 87 | + if (isVisible(Field.THROWABLE) && message.throwable() != null) |
57 | 88 | message.throwable().printStackTrace(printer);
|
58 | 89 |
|
59 | 90 | return sw.toString();
|
|
0 commit comments