You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by sd...@apache.org on 2023/12/18 09:12:14 UTC

(logging-chainsaw) branch master updated: Comment-out temporarily unsupported column types, fix iso8601/simple date conversion through the menu on the timestamp table header

This is an automated email from the ASF dual-hosted git repository.

sdeboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git


The following commit(s) were added to refs/heads/master by this push:
     new 6475b4a  Comment-out temporarily unsupported column types, fix iso8601/simple date conversion through the menu on the timestamp table header
6475b4a is described below

commit 6475b4ab77e9bb0908aeb63b78e898210267656d
Author: sdeboy <sd...@apache.org>
AuthorDate: Mon Dec 18 01:12:05 2023 -0800

    Comment-out temporarily unsupported column types, fix iso8601/simple date conversion through the menu on the timestamp table header
---
 .../org/apache/log4j/chainsaw/ChainsawColumns.java | 30 +++------
 .../chainsaw/ChainsawCyclicBufferTableModel.java   |  4 ++
 .../apache/log4j/chainsaw/ColumnComparator.java    |  8 ++-
 .../log4j/chainsaw/TableColorizingRenderer.java    | 26 ++++----
 .../chainsaw/components/logpanel/LogPanel.java     | 72 ++++++++++++++++------
 5 files changed, 83 insertions(+), 57 deletions(-)

diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
index 14f7549..3ff83b7 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
@@ -32,38 +32,22 @@ public class ChainsawColumns {
     private static final List<String> columnNames = new ArrayList<>();
 
     static {
-        columnNames.add(ChainsawConstants.LOGGER_COL_NAME);
-        columnNames.add(ChainsawConstants.LOG4J_MARKER_COL_NAME); //add uppercase col name
         columnNames.add(ChainsawConstants.TIMESTAMP_COL_NAME);
+        columnNames.add(ChainsawConstants.LOG4J_MARKER_COL_NAME);
         columnNames.add(ChainsawConstants.LEVEL_COL_NAME);
-        columnNames.add(ChainsawConstants.THREAD_COL_NAME);
+        columnNames.add(ChainsawConstants.LOGGER_COL_NAME);
         columnNames.add(ChainsawConstants.MESSAGE_COL_NAME);
-        columnNames.add(ChainsawConstants.NDC_COL_NAME);
-        columnNames.add(ChainsawConstants.THROWABLE_COL_NAME);
-        columnNames.add(ChainsawConstants.CLASS_COL_NAME);
-        columnNames.add(ChainsawConstants.METHOD_COL_NAME);
-        columnNames.add(ChainsawConstants.FILE_COL_NAME);
-        columnNames.add(ChainsawConstants.LINE_COL_NAME);
-        columnNames.add(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE.toUpperCase()); //add uppercase col name
 
         //NOTE:  ID must ALWAYS be last field because the model adds this value itself as an identifier to the end of the consructed vector
         columnNames.add(ChainsawConstants.ID_COL_NAME);
     }
 
-    public static final int INDEX_LOGGER_COL_NAME = 1;
+    public static final int INDEX_TIMESTAMP_COL_NAME = 1;
     public static final int INDEX_LOG4J_MARKER_COL_NAME = 2;
-    public static final int INDEX_TIMESTAMP_COL_NAME = 3;
-    public static final int INDEX_LEVEL_COL_NAME = 4;
-    public static final int INDEX_THREAD_COL_NAME = 5;
-    public static final int INDEX_MESSAGE_COL_NAME = 6;
-    public static final int INDEX_NDC_COL_NAME = 7;
-    public static final int INDEX_THROWABLE_COL_NAME = 8;
-    public static final int INDEX_CLASS_COL_NAME = 9;
-    public static final int INDEX_METHOD_COL_NAME = 10;
-    public static final int INDEX_FILE_COL_NAME = 11;
-    public static final int INDEX_LINE_COL_NAME = 12;
-    public static final int INDEX_MILLIS_DELTA_COL_NAME = 13;
-    public static final int INDEX_ID_COL_NAME = 14;
+    public static final int INDEX_LEVEL_COL_NAME = 3;
+    public static final int INDEX_LOGGER_COL_NAME = 4;
+    public static final int INDEX_MESSAGE_COL_NAME = 5;
+    public static final int INDEX_ID_COL_NAME = 6;
 
     public static final Cursor CURSOR_FOCUS_ON;
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index aa7437a..00b8fe9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -558,9 +558,11 @@ public class ChainsawCyclicBufferTableModel extends AbstractTableModel
             case ChainsawColumns.INDEX_LOG4J_MARKER_COL_NAME:
                 return event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
 
+/*
             case ChainsawColumns.INDEX_MILLIS_DELTA_COL_NAME:
                 return event.getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
 
+*/
             case ChainsawColumns.INDEX_LOGGER_COL_NAME:
                 return event.m_logger;
 
@@ -570,6 +572,7 @@ public class ChainsawCyclicBufferTableModel extends AbstractTableModel
             case ChainsawColumns.INDEX_MESSAGE_COL_NAME:
                 return event.m_message;
 
+/*
             case ChainsawColumns.INDEX_NDC_COL_NAME:
                 return event.m_ndc;
 
@@ -590,6 +593,7 @@ public class ChainsawCyclicBufferTableModel extends AbstractTableModel
 
             case ChainsawColumns.INDEX_METHOD_COL_NAME:
                 return info == null ? "" : info.methodName;
+*/
 
             default:
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
index 825f44c..018e890 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
@@ -67,7 +67,7 @@ public class ColumnComparator implements Comparator {
 
                     break;
 
-                case ChainsawColumns.INDEX_NDC_COL_NAME:
+/*                case ChainsawColumns.INDEX_NDC_COL_NAME:
                     if (e1.m_ndc != null && e2.m_ndc != null) {
                         sort =
                             e1.m_ndc.compareToIgnoreCase(
@@ -116,15 +116,17 @@ public class ColumnComparator implements Comparator {
                                 e2.m_locationInfo.methodName);
                     }
 
-                    break;
+                    break;*/
 
                 case ChainsawColumns.INDEX_TIMESTAMP_COL_NAME:
                     sort = e1.m_timestamp.compareTo(e2.m_timestamp);
                     break;
 
+/*
                 case ChainsawColumns.INDEX_THREAD_COL_NAME:
                     sort = e1.m_threadName.compareToIgnoreCase(e2.m_threadName);
                     break;
+*/
 
                 case ChainsawColumns.INDEX_ID_COL_NAME:
                     int id1 = Integer.parseInt(e1.getProperty(Constants.LOG4J_ID_KEY));
@@ -132,6 +134,7 @@ public class ColumnComparator implements Comparator {
                     sort = Integer.compare(id2, id1);
                     break;
 
+/*
                 case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
 //                    if (e1.getThrowableStrRep() != null && e2.getThrowableStrRep() != null) {
 //                        String[] s1 = e1.getThrowableStrRep();
@@ -154,6 +157,7 @@ public class ColumnComparator implements Comparator {
                         sort = e1.m_locationInfo.lineNumber - e2.m_locationInfo.lineNumber;
                     }
                     break;
+*/
 
                 //other columns may be Property values - see if there is an Property value matching column name
                 default:
diff --git a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
index c71bf6d..86ef94e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
@@ -32,13 +32,13 @@ import javax.swing.text.*;
 import java.awt.*;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TimeZone;
+import java.util.*;
+
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 
@@ -181,7 +181,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
 
         JComponent component;
         switch (colIndex) {
-            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
+/*            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
                 if (value instanceof String[] && ((String[]) value).length > 0) {
                     Style tabStyle = singleLineTextPane.getLogicalStyle();
                     StyleConstants.setTabSet(tabStyle, tabs);
@@ -200,7 +200,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
                 }
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
-                break;
+                break;*/
             case ChainsawColumns.INDEX_LOGGER_COL_NAME:
                 String logger = value.toString();
                 int startPos = -1;
@@ -222,7 +222,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
                 break;
-            case ChainsawColumns.INDEX_CLASS_COL_NAME:
+/*            case ChainsawColumns.INDEX_CLASS_COL_NAME:
                 singleLineTextPane.setText(value.toString());
                 setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.CLASS_FIELD), (StyledDocument) singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
@@ -251,7 +251,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
                 setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.THREAD_FIELD), (StyledDocument) singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
-                break;
+                break;*/
             case ChainsawColumns.INDEX_TIMESTAMP_COL_NAME:
                 //timestamp matches contain the millis..not the display text..just highlight if we have a match for the timestamp field
                 Set timestampMatches = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
@@ -264,12 +264,12 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
                 break;
-            case ChainsawColumns.INDEX_METHOD_COL_NAME:
+/*            case ChainsawColumns.INDEX_METHOD_COL_NAME:
                 singleLineTextPane.setText(value.toString());
                 setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.METHOD_FIELD), (StyledDocument) singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
-                break;
+                break;*/
             case ChainsawColumns.INDEX_LOG4J_MARKER_COL_NAME:
             case ChainsawColumns.INDEX_MESSAGE_COL_NAME:
                 String thisString = value.toString().trim();
@@ -546,20 +546,20 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
      * @return formatted object
      */
     private Object formatField(Object field, LoggingEventWrapper loggingEventWrapper) {
-        if (!(field instanceof ZonedDateTime)) {
+        if (!(field instanceof Instant)) {
             return (field == null ? "" : field);
         }
 
         //handle date field
         if (useRelativeTimesToFixedTime) {
-            ZonedDateTime dt = (ZonedDateTime)field;
+            ZonedDateTime dt = ((Instant) field).atZone(ZoneOffset.UTC);
             return "" + ChronoUnit.MILLIS.between(dt, relativeTimestampBase);
         }
         if (useRelativeTimesToPrevious) {
             return loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
         }
 
-        return ((ZonedDateTime)field).format(DateTimeFormatter.ISO_DATE);
+        return dateFormatInUse.format(Date.from((Instant)field));
     }
 
     /**
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
index 157a633..7be60df 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
@@ -17,6 +17,8 @@
 
 package org.apache.log4j.chainsaw.components.logpanel;
 
+import org.apache.commons.configuration2.event.Event;
+import org.apache.commons.configuration2.event.EventListener;
 import org.apache.log4j.chainsaw.*;
 import org.apache.log4j.chainsaw.color.ColorPanel;
 import org.apache.log4j.chainsaw.color.RuleColorizer;
@@ -286,13 +288,14 @@ public class LogPanel extends DockablePanel implements ChainsawEventBatchListene
             new JRadioButtonMenuItem(
                 new AbstractAction("Use ISO8601Format") {
                     public void actionPerformed(ActionEvent e) {
-
+                        logPanelPreferenceModel.setDateFormatPattern("ISO8601");
                     }
                 });
         final JRadioButtonMenuItem simpleTimeButton =
             new JRadioButtonMenuItem(
                 new AbstractAction("Use simple time") {
                     public void actionPerformed(ActionEvent e) {
+                        logPanelPreferenceModel.setDateFormatPattern("HH:mm:ss");
                     }
                 });
 
@@ -394,30 +397,28 @@ public class LogPanel extends DockablePanel implements ChainsawEventBatchListene
         logPanelPreferenceModel.addEventListener(
             evt -> {
             if (evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
-                LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
-
-                isoButton.setSelected(model.isUseISO8601Format());
-                simpleTimeButton.setSelected(!model.isUseISO8601Format() && !model.isCustomDateFormat());
+                isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
+                simpleTimeButton.setSelected(!logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
 
-                if (model.getDateFormatTimeZone() != null) {
-                    renderer.setTimeZone(model.getDateFormatTimeZone());
-                    searchRenderer.setTimeZone(model.getDateFormatTimeZone());
+                if (logPanelPreferenceModel.getDateFormatTimeZone() != null) {
+                    renderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
+                    searchRenderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
                 }
 
-                if (model.isUseISO8601Format()) {
+                if (logPanelPreferenceModel.isUseISO8601Format()) {
                     renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
                     searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
                 } else {
                     try {
-                        renderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
+                        renderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
                     } catch (IllegalArgumentException iae) {
-                        model.setDefaultDatePatternFormat();
+                        logPanelPreferenceModel.setDefaultDatePatternFormat();
                         renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
                     }
                     try {
-                        searchRenderer.setDateFormatter(new SimpleDateFormat(model.getDateFormatPattern()));
+                        searchRenderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
                     } catch (IllegalArgumentException iae) {
-                        model.setDefaultDatePatternFormat();
+                        logPanelPreferenceModel.setDefaultDatePatternFormat();
                         searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
                     }
                 }
@@ -430,8 +431,7 @@ public class LogPanel extends DockablePanel implements ChainsawEventBatchListene
         logPanelPreferenceModel.addEventListener(
             evt -> {
                 if (evt.getPropertyName().equals(LogPanelPreferenceModel.CLEAR_TABLE_EXPRESSION)) {
-                    LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
-                    String expression = model.getClearTableExpression();
+                    String expression = evt.getPropertyValue().toString();
                     try {
                         clearTableExpressionRule = ExpressionRule.getRule(expression);
                         logger.info("clearTableExpressionRule set to: " + expression);
@@ -442,15 +442,47 @@ public class LogPanel extends DockablePanel implements ChainsawEventBatchListene
                 }
             });
 
+        logPanelPreferenceModel.addEventListener(evt -> {
+                if (!evt.isBeforeUpdate() && evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_PATTERN) ||
+                    evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
+
+            isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
+            simpleTimeButton.setSelected(!logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
+
+            if (logPanelPreferenceModel.getDateFormatTimeZone() != null && !logPanelPreferenceModel.getDateFormatTimeZone().isEmpty()) {
+                renderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
+                searchRenderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
+            }
+
+            if (logPanelPreferenceModel.isUseISO8601Format()) {
+                renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+            } else {
+                try {
+                    renderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
+                } catch (IllegalArgumentException iae) {
+                    logPanelPreferenceModel.setDefaultDatePatternFormat();
+                    renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                }
+                try {
+                    searchRenderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
+                } catch (IllegalArgumentException iae) {
+                    logPanelPreferenceModel.setDefaultDatePatternFormat();
+                    searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                }
+            }
+
+            table.tableChanged(new TableModelEvent(tableModel));
+            searchTable.tableChanged(new TableModelEvent(searchModel));
+        }});
+
         logPanelPreferenceModel.addEventListener(
             evt -> {
                 if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOGGER_PRECISION)) {
-                    LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
-
-                    renderer.setLoggerPrecision(model.getLoggerPrecision());
+                    renderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
                     table.tableChanged(new TableModelEvent(tableModel));
 
-                    searchRenderer.setLoggerPrecision(model.getLoggerPrecision());
+                    searchRenderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
                     searchTable.tableChanged(new TableModelEvent(searchModel));
                 }
             });
@@ -3304,12 +3336,14 @@ public class LogPanel extends DockablePanel implements ChainsawEventBatchListene
         }
 
         public void mouseClicked(MouseEvent e) {
+/*
             TableColumn column = throwableTable.getColumnModel().getColumn(throwableTable.columnAtPoint(e.getPoint()));
             if (!column.getHeaderValue().toString().toUpperCase().equals(ChainsawColumns.getColumnName(ChainsawColumns.INDEX_THROWABLE_COL_NAME))) {
                 return;
             }
 
             LoggingEventWrapper loggingEventWrapper = throwableEventContainer.getRow(throwableTable.getSelectedRow());
+*/
 
             //throwable string representation may be a length-one empty array
 //            String[] ti = loggingEventWrapper.getLoggingEvent().getThrowableStrRep();