Enable Java Swing Logging (Key Submission)

I need to debug sending key events in a Swing app. I thought that would be enough:

val eventLog = PlatformLogger.getLogger("java.awt.event.Component") eventLog.setLevel(PlatformLogger.Level.ALL) val focusLog = PlatformLogger.getLogger("java.awt.focus.DefaultKeyboardFocusManager") focusLog.setLevel(PlatformLogger.Level.ALL) 

But nothing happens. (log report that they are included, but I do not see the text output). Do I need to configure PrintStream somewhere to see the log messages?

+5
source share
1 answer

As suggested here , I'm not sure if using sun.util.logging.PlatformLogger is appropriate. To log focus events, I had to specify a higher level in the root log, for example. Level.ALL Adding a ConsoleHandler , for example, can make reading a log easier.

Console:

  java.awt.focus.DefaultKeyboardFocusManager: sun.awt.TimedWindowEvent [WINDOW_GAINED_FOCUS, opposite = null, oldState = 0, newState = 0] on frame0
 java.awt.focus.DefaultKeyboardFocusManager: java.awt.event.WindowEvent [WINDOW_ACTIVATED, opposite = null, oldState = 0, newState = 0] on frame0
 java.awt.focus.DefaultKeyboardFocusManager: tempLost {0}, toFocus {1}
 java.awt.focus.Component: focus owner is null or this
 java.awt.focus.DefaultKeyboardFocusManager: Enqueue at {0} for {1}
 java.awt.focus.Component: Pass for javax.swing.JButton [, 0,0,97x29, alignmentX = 0.0, alignmentY = 0.5, border=com.apple.laf.AquaButtonBorder$Dynamic@56e325b9 , flags = 288, maximumSize =, minimumSize =, preferredSize =, defaultIcon =, disabledIcon =, disabledSelectedIcon =, margin = javax.swing.plaf.InsetsUIResource [top = 0, left = 2, bottom = 0, right = 2], paintBorder = true, paintFocus = true, pressedIcon =, rolloverEnabled = false, rolloverIcon =, rolloverSelectedIcon =, selectedIcon =, text = Button 1, defaultCapable = true]
 java.awt.focus.DefaultKeyboardFocusManager: java.awt.event.WindowEvent [WINDOW_OPENED, opposite = null, oldState = 0, newState = 0] on frame0
 java.awt.focus.DefaultKeyboardFocusManager: sun.awt.TimedWindowEvent [WINDOW_GAINED_FOCUS, opposite = javax.swing.JFrame [frame0,752,469,97x80, layout = java.awt.BorderLayout, title = LoggerTest, resizable, normal, exclose = normal rootPane = javax.swing.JRootPane [, 0.22.97x58, layout = javax.swing.JRootPane $ RootLayout, alignmentX = 0.0, alignmentY = 0.0, border =, flags = 16777673, maximumSize =, minimumSize =, preferredSize =], rootPaneCheckingEnabled = true], oldState = 0, newState = 0] on frame0
 java.awt.focus.DefaultKeyboardFocusManager: java.awt.FocusEvent [FOCUS_GAINED, permanent, opposite = null, cause = ACTIVATION] on javax.swing.JButton [, 0,0,97x29, alignmentX = 0.0, alignmentY = 0.5, border=com.apple.laf.AquaButtonBorder$Dynamic@56e325b9 , flags = 288, maximumSize =, minimumSize =, preferredSize =, defaultIcon =, disabledIcon =, disabledSelectedIcon =, margin = javax.swing.plaf.InsetsUIResource [top = 0, left = 2, bottom = 0, right = 2 ], paintBorder = true, paintFocus = true, pressedIcon =, rolloverEnabled = false, rolloverIcon =, rolloverSelectedIcon =, selectedIcon =, text = Button 1, defaultCapable = true]
 java.awt.focus.DefaultKeyboardFocusManager: Markers before FOCUS_GAINED on {0}
 java.awt.focus.DefaultKeyboardFocusManager: >>> Markers dump, time: {0}
 java.awt.focus.DefaultKeyboardFocusManager: {0}
 java.awt.focus.DefaultKeyboardFocusManager: Markers after FOCUS_GAINED
 java.awt.focus.DefaultKeyboardFocusManager: >>> Markers dump, time: {0}
 java.awt.focus.Component: java.awt.FocusEvent [FOCUS_GAINED, permanent, opposite = null, cause = ACTIVATION] on javax.swing.JButton [, 0,0,97x29, alignmentX = 0.0, alignmentY = 0.5, border=com.apple.laf.AquaButtonBorder$Dynamic@56e325b9 , flags = 288, maximumSize =, minimumSize =, preferredSize =, defaultIcon =, disabledIcon =, disabledSelectedIcon =, margin = javax.swing.plaf.InsetsUIResource [top = 0, left = 2, bottom = 0, right = 2 ], paintBorder = true, paintFocus = true, pressedIcon =, rolloverEnabled = false, rolloverIcon =, rolloverSelectedIcon =, selectedIcon =, text = Button 1, defaultCapable = true]
 java.awt.focus.DefaultKeyboardFocusManager: java.awt.event.WindowEvent [WINDOW_CLOSING, opposite = null, oldState = 0, newState = 0] on frame0

code:

 import java.awt.EventQueue; import java.awt.GridLayout; import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import javax.swing.JButton; import javax.swing.JFrame; /** * @see https://stackoverflow.com/a/31223145/230513 * @see https://stackoverflow.com/q/20815048/230513 */ public class LoggerTest { private void display() { JFrame f = new JFrame("LoggerTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new GridLayout(0, 1)); f.add(new JButton("Button 1")); f.add(new JButton("Button 2")); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { Logger rootLogger = Logger.getLogger(""); rootLogger.setLevel(Level.ALL); logClass("java.awt.focus.Component"); logClass("java.awt.focus.DefaultKeyboardFocusManager"); EventQueue.invokeLater(new LoggerTest()::display); } private static void logClass(String name) { ConsoleHandler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.ALL); consoleHandler.setFormatter(new Formatter() { @Override public String format(LogRecord record) { return name + ": " + record.getMessage() + '\n'; } }); Logger logger = Logger.getLogger(name); logger.setLevel(Level.ALL); logger.addHandler(consoleHandler); } } 
+5
source

All Articles