Skip to content

Commit c2ff383

Browse files
committed
LoggingPanel: add "Settings" to LoggingPanel's popup menu
Now LoggingPanel can be used to record and show the calling class of the log messages.
1 parent 3b9e30d commit c2ff383

File tree

2 files changed

+83
-14
lines changed

2 files changed

+83
-14
lines changed

src/main/java/org/scijava/ui/swing/console/LogFormatter.java

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import java.io.PrintWriter;
3535
import java.io.StringWriter;
36+
import java.util.EnumSet;
3637

3738
import org.scijava.log.LogLevel;
3839
import org.scijava.log.LogMessage;
@@ -44,25 +45,56 @@
4445
*/
4546
public class LogFormatter {
4647

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+
4767
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()));
4877

49-
final StringWriter sw = new StringWriter();
50-
final PrintWriter printer = new PrintWriter(sw);
78+
if (isVisible(Field.SOURCE))
79+
printWithBrackets(printer, message.source().toString());
5180

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+
}
5885

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+
}
6095
}
6196

6297
private void printWithBrackets(PrintWriter printer, String prefix) {
63-
printer.print('[');
64-
printer.print(prefix);
65-
printer.print("] ");
98+
printer.append('[').append(prefix).append("] ");
6699
}
67-
68100
}

src/main/java/org/scijava/ui/swing/console/LoggingPanel.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,6 @@ private void registerKeyStroke(String keyStroke, String id, final Runnable actio
207207
getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke
208208
.getKeyStroke(keyStroke), id);
209209
getActionMap().put(id, new AbstractAction() {
210-
211210
@Override
212211
public void actionPerformed(ActionEvent actionEvent) {
213212
action.run();
@@ -227,9 +226,47 @@ private JPopupMenu initMenu() {
227226
this::clear);
228227
menu.add(newMenuItem("Log Sources",
229228
this::toggleSourcesPanel));
229+
menu.add(initSettingsMenu());
230+
return menu;
231+
}
232+
233+
private JMenu initSettingsMenu() {
234+
JMenu menu = new JMenu("Settings");
235+
menu.add(checkboxItem(LogFormatter.Field.TIME, "show time stamp"));
236+
menu.add(checkboxItem(LogFormatter.Field.SOURCE, "show log source"));
237+
menu.add(checkboxItem(LogFormatter.Field.LEVEL, "show log level"));
238+
menu.add(checkboxItem(LogFormatter.Field.THROWABLE, "show exception"));
239+
menu.add(checkboxItem(LogFormatter.Field.ATTACHMENT, "show attached data"));
240+
menu.add(new JSeparator());
241+
menu.add(recordCallingClassMenuItem());
230242
return menu;
231243
}
232244

245+
private JCheckBoxMenuItem recordCallingClassMenuItem() {
246+
JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem();
247+
menuItem.setState(false);
248+
menuItem.setAction(new AbstractAction("record calling class") {
249+
@Override
250+
public void actionPerformed(ActionEvent e) {
251+
recorder.setRecordCallingClass(menuItem.getState());
252+
updateFilter();
253+
}
254+
});
255+
return menuItem;
256+
}
257+
258+
private JMenuItem checkboxItem(LogFormatter.Field field, String text) {
259+
JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(text, logFormatter.isVisible(field));
260+
menuItem.setAction(new AbstractAction(text) {
261+
@Override
262+
public void actionPerformed(ActionEvent e) {
263+
logFormatter.setVisible(field, menuItem.getState());
264+
updateFilter();
265+
}
266+
});
267+
return menuItem;
268+
}
269+
233270
static private JMenuItem newMenuItem(String text, String keyStroke,
234271
Runnable runnable)
235272
{

0 commit comments

Comments
 (0)