diff options
author | Manuel Bentele | 2021-12-13 11:04:15 +0100 |
---|---|---|
committer | Manuel Bentele | 2021-12-15 15:44:57 +0100 |
commit | f7daa85863f784282f6ad37db2ff39cdcdf0483d (patch) | |
tree | af6069433723345d1356f8634690de6ee6fd32c4 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java | |
parent | [CLIENT] Adapt OS loader of QEMU machines for local edit (diff) | |
download | tutor-module-f7daa85863f784282f6ad37db2ff39cdcdf0483d.tar.gz tutor-module-f7daa85863f784282f6ad37db2ff39cdcdf0483d.tar.xz tutor-module-f7daa85863f784282f6ad37db2ff39cdcdf0483d.zip |
[CLIENT] Update log4j because of the CVE-2021-44228 security flaw
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java | 144 |
1 files changed, 87 insertions, 57 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java index f740b83d..be8c992c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java @@ -3,6 +3,7 @@ package org.openslx.dozmod.gui.helper; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Insets; +import java.io.Serializable; import javax.swing.BorderFactory; import javax.swing.JPanel; @@ -15,15 +16,85 @@ import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; -import org.apache.log4j.Appender; -import org.apache.log4j.AppenderSkeleton; -import org.apache.log4j.BasicConfigurator; -import org.apache.log4j.Level; -import org.apache.log4j.spi.LoggingEvent; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Core; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.Layout; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.AbstractAppender; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.Property; +import org.apache.logging.log4j.core.config.plugins.Plugin; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.openslx.dozmod.gui.Gui; +@Plugin(name = "DebugAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) +class DebugAppender extends AbstractAppender +{ + private static final DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm:ss"); + private final JTextPane textPane; + + protected DebugAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout, + final boolean ignoreExceptions, final Property[] properties, final JTextPane textPane) + { + super(name, filter, layout, ignoreExceptions, properties); + this.textPane = textPane; + } + + protected DebugAppender(final String name, final Filter filter, final JTextPane textPane) + { + this(name, filter, null, true, null, textPane); + } + + @Override + public void append(LogEvent event) + { + final Level eventLevel = event.getLevel(); + final Color eventColor; + + if (eventLevel.isMoreSpecificThan(Level.ERROR)) { + eventColor = Color.RED; + } else if (eventLevel.isMoreSpecificThan(Level.WARN)) { + eventColor = Color.ORANGE; + } else if (eventLevel.isMoreSpecificThan(Level.INFO)) { + eventColor = Color.BLACK; + } else { + eventColor = Color.GRAY; + } + + final long eventTimestamp = event.getTimeMillis(); + final String eventThreadName = event.getThreadName(); + final String eventLoggerName = event.getLoggerName(); + final String eventMessage = event.getMessage().getFormattedMessage(); + + Gui.asyncExec( new Runnable() { + @Override + public void run() + { + printEvent("[" + formatter.print( eventTimestamp ) + "] ", Color.BLACK); + printEvent(eventThreadName + "@" + eventLoggerName.replaceAll("^.*\\.", ""), Color.GRAY); + printEvent(" " + eventMessage + "\n", eventColor); + } + } ); + } + + private void printEvent(String msg, Color c) { + StyledDocument doc = this.textPane.getStyledDocument(); + SimpleAttributeSet keyWord = new SimpleAttributeSet(); + StyleConstants.setForeground(keyWord, c); + try { + doc.insertString(doc.getLength(), msg, keyWord); + } catch (BadLocationException e) { + e.printStackTrace(); // Do not use LOGGER here to prevent infinite loop + } + this.textPane.setCaretPosition(doc.getLength()); + } +} + public class DebugWindow extends JPanel { /** @@ -31,8 +102,6 @@ public class DebugWindow extends JPanel { */ private static final long serialVersionUID = 2602474207529142616L; - private static final DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm:ss"); - private final JTextPane txtLog; public DebugWindow() { @@ -51,56 +120,17 @@ public class DebugWindow extends JPanel { } private void registerLogger() { - Appender appender = new AppenderSkeleton() { + final LoggerContext loggingContext = LoggerContext.class.cast(LogManager.getContext(false)); + final Configuration loggingConfig = loggingContext.getConfiguration(); + + // add debug logging appender + final DebugAppender debugAppender = new DebugAppender("logToDebug", null, this.txtLog); + debugAppender.start(); + + // register debug logging appender + loggingConfig.addAppender(debugAppender); + loggingConfig.getRootLogger().addAppender(debugAppender, Level.ALL, null); - @Override - public boolean requiresLayout() { - return false; - } - - @Override - public void close() { - // Nothing to do - } - - @Override - protected void append(final LoggingEvent event) { - final Level l = event.getLevel(); - final Color c; - if (l.isGreaterOrEqual(Level.ERROR)) { - c = Color.RED; - } else if (l.isGreaterOrEqual(Level.WARN)) { - c = Color.ORANGE; - } else if (l.isGreaterOrEqual(Level.INFO)) { - c = Color.BLACK; - } else { - c = Color.GRAY; - } - Gui.asyncExec(new Runnable() { - @Override - public void run() { - - log("[" + formatter.print(event.getTimeStamp()) + "] ", Color.BLACK); - log(event.getThreadName() + "@" + event.getLoggerName().replaceAll("^.*\\.", ""), - Color.GRAY); - log(" " + event.getMessage() + "\n", c); - } - }); - } - }; - BasicConfigurator.configure(appender); + loggingContext.updateLoggers(loggingConfig); } - - private void log(String msg, Color c) { - StyledDocument doc = txtLog.getStyledDocument(); - SimpleAttributeSet keyWord = new SimpleAttributeSet(); - StyleConstants.setForeground(keyWord, c); - try { - doc.insertString(doc.getLength(), msg, keyWord); - } catch (BadLocationException e) { - e.printStackTrace(); // Do not use LOGGER here to prevent infinite loop - } - txtLog.setCaretPosition(doc.getLength()); - } - } |