package com.kostbot.zoodirector.ui; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Layout; import org.apache.log4j.PatternLayout; import org.apache.log4j.spi.LoggingEvent; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ZooDirectorLogDialog extends JDialog { final JTextArea logTextArea; final JTextField lastLogTextField; final JPanel lastLogPanel; public ZooDirectorLogDialog() { super(new JFrame(), "Logs"); JButton lastLogButton = new JButton(UIManager.getIcon("FileChooser.listViewIcon")); lastLogButton.setToolTipText("click to view/hide log viewer"); lastLogPanel = new JPanel(new BorderLayout()); lastLogPanel.add(lastLogButton, BorderLayout.WEST); this.add(lastLogPanel, BorderLayout.SOUTH); logTextArea = new JTextArea(25, 100); logTextArea.setEditable(false); logTextArea.setLineWrap(false); logTextArea.setFont(ZooDirectorFrame.FONT_MONOSPACED); JScrollPane logScrollPane = new JScrollPane(logTextArea); this.add(logScrollPane); this.pack(); this.setLocationRelativeTo(SwingUtilities.getRoot(this)); lastLogTextField = new JTextField(); lastLogTextField.setEditable(false); lastLogTextField.setHorizontalAlignment(JLabel.LEFT); lastLogTextField.setFont(ZooDirectorFrame.FONT_MONOSPACED); lastLogPanel.add(lastLogTextField, BorderLayout.CENTER); lastLogButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ZooDirectorLogDialog.this.setVisible(!ZooDirectorLogDialog.this.isVisible()); } }); org.apache.log4j.Logger.getRootLogger().addAppender(new AppenderSkeleton() { @Override protected void append(LoggingEvent loggingEvent) { final Layout layout = new PatternLayout("%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p : %m%n"); String line = layout.format(loggingEvent); logTextArea.append(line); lastLogTextField.setText(line); } @Override public void close() { } @Override public boolean requiresLayout() { return false; } }); } public JPanel getLastLogPanel() { return lastLogPanel; } }