summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java
diff options
context:
space:
mode:
authorManuel Bentele2021-12-13 11:04:15 +0100
committerManuel Bentele2021-12-15 15:44:57 +0100
commitf7daa85863f784282f6ad37db2ff39cdcdf0483d (patch)
treeaf6069433723345d1356f8634690de6ee6fd32c4 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/DebugWindow.java
parent[CLIENT] Adapt OS loader of QEMU machines for local edit (diff)
downloadtutor-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.java144
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());
- }
-
}