Comment-out temporarily unsupported column types, fix iso8601/simple date conversion through the menu on the timestamp table header
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 @@
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 @@
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 @@
case ChainsawColumns.INDEX_MESSAGE_COL_NAME:
return event.m_message;
+/*
case ChainsawColumns.INDEX_NDC_COL_NAME:
return event.m_ndc;
@@ -590,6 +593,7 @@
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 @@
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 @@
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 @@
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 @@
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 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 @@
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 @@
}
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 @@
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 @@
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 @@
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 @@
* @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 @@
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 @@
logPanelPreferenceModel.addEventListener(
evt -> {
if (evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
- LogPanelPreferenceModel model = (LogPanelPreferenceModel) evt.getSource();
+ isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
+ simpleTimeButton.setSelected(!logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
- isoButton.setSelected(model.isUseISO8601Format());
- simpleTimeButton.setSelected(!model.isUseISO8601Format() && !model.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 @@
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 @@
}
});
+ 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 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();