You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@logging.apache.org by sd...@apache.org on 2008/06/16 08:28:42 UTC
svn commit: r668059 - in
/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw:
LogPanel.java LogPanelPreferenceModel.java LogPanelPreferencePanel.java
TableColorizingRenderer.java
Author: sdeboy
Date: Sun Jun 15 23:28:41 2008
New Revision: 668059
URL: http://svn.apache.org/viewvc?rev=668059&view=rev
Log:
New log panel preference: time zone of events on tab
Allows a user to specify (via the timezone abbreviation) the time zone of events on the tab, providing the ability to view logs in local time.
For example, if events are from a log file which is in GMT, and you're in PST, set the time zone preference to GMT and the timestamp field for events on that tab will be rendered +7 hours ahead of the actual event timestamp values.
Modified:
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java
logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java?rev=668059&r1=668058&r2=668059&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java Sun Jun 15 23:28:41 2008
@@ -112,15 +112,13 @@
import javax.swing.table.TableColumnModel;
import javax.swing.text.Document;
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.chainsaw.color.ColorPanel;
import org.apache.log4j.chainsaw.color.RuleColorizer;
import org.apache.log4j.chainsaw.filter.FilterModel;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.chainsaw.icons.LineIconFactory;
import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
@@ -132,13 +130,15 @@
import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.chainsaw.xstream.TableColumnConverter;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
import org.apache.log4j.helpers.Constants;
import org.apache.log4j.rule.ExpressionRule;
import org.apache.log4j.rule.Rule;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.LoggingEventFieldResolver;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
/**
* A LogPanel provides a view to a collection of LoggingEvents.<br>
@@ -475,6 +475,10 @@
simpleTimeButton.setSelected(
!model.isUseISO8601Format() && !model.isCustomDateFormat());
+ if (model.getTimeZone() != null) {
+ renderer.setTimeZone(model.getTimeZone());
+ }
+
if (model.isUseISO8601Format()) {
renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
} else {
@@ -493,8 +497,7 @@
preferenceModel.addPropertyChangeListener(
"dateFormatPattern", datePrefsChangeListener);
- preferenceModel.addPropertyChangeListener(
- "dateFormatPattern", datePrefsChangeListener);
+ preferenceModel.addPropertyChangeListener("dateFormatTimeZone", datePrefsChangeListener);
preferenceModel.addPropertyChangeListener(
"loggerPrecision",
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java?rev=668059&r1=668058&r2=668059&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java Sun Jun 15 23:28:41 2008
@@ -77,6 +77,7 @@
private String loggerPrecision = "";
private Collection hiddenLoggers = new HashSet();
+ private String timeZone;
/**
* Returns an <b>unmodifiable</b> list of the columns.
@@ -215,6 +216,7 @@
setLoggerPrecision(model.getLoggerPrecision());
setDateFormatPattern(model.getDateFormatPattern());
setLevelIcons(model.isLevelIcons());
+ setTimeZone(model.getTimeZone());
setToolTips(model.isToolTips());
setScrollToBottom(model.isScrollToBottom());
setDetailPaneVisible(model.isDetailPaneVisible());
@@ -395,7 +397,17 @@
propertySupport.firePropertyChange("hiddenLoggers", oldValue, this.hiddenLoggers);
}
-public Collection getHiddenLoggers() {
+ public Collection getHiddenLoggers() {
return hiddenLoggers;
-}
+ }
+
+ public String getTimeZone() {
+ return timeZone;
+ }
+
+ public void setTimeZone(String timeZone) {
+ Object oldValue = this.timeZone;
+ this.timeZone = timeZone;
+ propertySupport.firePropertyChange("dateFormatTimeZone", oldValue, this.timeZone);
+ }
}
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java?rev=668059&r1=668058&r2=668059&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferencePanel.java Sun Jun 15 23:28:41 2008
@@ -18,7 +18,6 @@
import java.awt.Component;
import java.awt.Dimension;
-import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
@@ -41,6 +40,7 @@
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
+import javax.swing.SwingConstants;
import javax.swing.table.TableColumn;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
@@ -223,11 +223,12 @@
//~ Instance fields =======================================================
private JTextField customFormatText = new JTextField("", 10);
- private JTextField loggerPrecision = new JTextField(5);
+ private JTextField loggerPrecision = new JTextField(10);
private JRadioButton rdCustom = new JRadioButton("Custom Format");
private final JRadioButton rdISO =
new JRadioButton(
"<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss)</html>");
+ private final JTextField timeZone = new JTextField(10);
private final JRadioButton rdLevelIcons = new JRadioButton("Icons");
private final JRadioButton rdLevelText = new JRadioButton("Text");
private JRadioButton rdLast;
@@ -248,25 +249,18 @@
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel dateFormatPanel = new JPanel();
+ dateFormatPanel.setLayout(new BoxLayout(dateFormatPanel, BoxLayout.Y_AXIS));
dateFormatPanel.setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Timestamp"));
- dateFormatPanel.setLayout(
- new BoxLayout(dateFormatPanel, BoxLayout.Y_AXIS));
- dateFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
-
- customFormatText.setPreferredSize(new Dimension(100, 20));
- customFormatText.setMaximumSize(customFormatText.getPreferredSize());
- customFormatText.setMinimumSize(customFormatText.getPreferredSize());
- customFormatText.setEnabled(false);
-
- rdCustom.setSelected(preferenceModel.isCustomDateFormat());
ButtonGroup bgDateFormat = new ButtonGroup();
- rdISO.setAlignmentX(0);
rdISO.setSelected(preferenceModel.isUseISO8601Format());
+ rdISO.setHorizontalTextPosition(SwingConstants.RIGHT);
+ rdISO.setAlignmentX(Component.LEFT_ALIGNMENT);
+
bgDateFormat.add(rdISO);
dateFormatPanel.add(rdISO);
@@ -276,9 +270,9 @@
{
final String format = (String) iter.next();
final JRadioButton rdFormat = new JRadioButton(format);
- rdFormat.setAlignmentX(0);
+ rdFormat.setHorizontalTextPosition(SwingConstants.RIGHT);
+ rdFormat.setAlignmentX(Component.LEFT_ALIGNMENT);
- bgDateFormat.add(rdFormat);
rdFormat.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
@@ -302,8 +296,17 @@
});
dateFormatPanel.add(rdFormat);
+ bgDateFormat.add(rdFormat);
}
+ customFormatText.setPreferredSize(new Dimension(100, 20));
+ customFormatText.setMaximumSize(customFormatText.getPreferredSize());
+ customFormatText.setMinimumSize(customFormatText.getPreferredSize());
+ customFormatText.setEnabled(false);
+
+ bgDateFormat.add(rdCustom);
+ rdCustom.setSelected(preferenceModel.isCustomDateFormat());
+
// add a custom date format
if (preferenceModel.isCustomDateFormat())
{
@@ -311,19 +314,22 @@
customFormatText.setEnabled(true);
}
- rdCustom.setAlignmentX(0);
- bgDateFormat.add(rdCustom);
-
- Box customBox = Box.createHorizontalBox();
-
- // Following does not work in JDK 1.3.1
- // customBox.setAlignmentX(0);
- customBox.add(rdCustom);
- customBox.add(customFormatText);
- customBox.add(Box.createHorizontalGlue());
- dateFormatPanel.add(customBox);
-
- // dateFormatPanel.add(Box.createVerticalGlue());
+ JPanel customPanel = new JPanel();
+ customPanel.setLayout(new BoxLayout(customPanel, BoxLayout.X_AXIS));
+ customPanel.add(rdCustom);
+ customPanel.add(customFormatText);
+ customPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+
+ dateFormatPanel.add(customPanel);
+ dateFormatPanel.add(Box.createVerticalStrut(5));
+
+ JLabel dateFormatLabel = new JLabel("Time zone of events on tab (leave blank for local time zone");
+ dateFormatPanel.add(dateFormatLabel);
+
+ timeZone.setMaximumSize(timeZone.getPreferredSize());
+ dateFormatPanel.add(Box.createVerticalStrut(5));
+ dateFormatPanel.add(timeZone);
+
add(dateFormatPanel);
JPanel levelFormatPanel = new JPanel();
@@ -353,21 +359,18 @@
BorderFactory.createEtchedBorder(), "Logger"));
loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+ loggerFormatPanel.add(Box.createVerticalStrut(3));
+
final JLabel precisionLabel =
- new JLabel("Number of package levels to hide)");
- final JLabel precisionLabel2 =
- new JLabel("leave blank to display full logger");
+ new JLabel("Number of package levels to hide (leave blank to display full logger)");
loggerFormatPanel.add(precisionLabel);
- loggerFormatPanel.add(precisionLabel2);
+ loggerFormatPanel.add(Box.createVerticalStrut(5));
- JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
-
- p.add(loggerPrecision);
- loggerFormatPanel.add(p);
+ loggerPrecision.setMaximumSize(loggerPrecision.getPreferredSize());
+ loggerFormatPanel.add(loggerPrecision);
add(loggerFormatPanel);
-
add(Box.createVerticalGlue());
}
@@ -386,6 +389,7 @@
}
loggerPrecision.setText(preferenceModel.getLoggerPrecision());
+ timeZone.setText(preferenceModel.getTimeZone());
}
/*
@@ -396,6 +400,7 @@
preferenceModel.setDateFormatPattern(customFormatText.getText());
}
preferenceModel.setLoggerPrecision(loggerPrecision.getText());
+ preferenceModel.setTimeZone(timeZone.getText());
}
/**
@@ -468,6 +473,13 @@
rdLast = rdISO;
}
});
+ preferenceModel.addPropertyChangeListener(
+ "dateFormatTimeZone", new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ timeZone.setText(preferenceModel.getTimeZone());
+ }
+ }
+ );
ActionListener levelIconListener = new ActionListener()
{
Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java?rev=668059&r1=668058&r2=668059&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java Sun Jun 15 23:28:41 2008
@@ -17,19 +17,13 @@
package org.apache.log4j.chainsaw;
-import org.apache.log4j.chainsaw.color.Colorizer;
-import org.apache.log4j.chainsaw.icons.LevelIconFactory;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.spi.LoggingEvent;
-
import java.awt.Color;
import java.awt.Component;
-
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-
import java.util.Date;
import java.util.Map;
+import java.util.TimeZone;
import javax.swing.BorderFactory;
import javax.swing.Icon;
@@ -38,6 +32,11 @@
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
+import org.apache.log4j.chainsaw.color.Colorizer;
+import org.apache.log4j.chainsaw.icons.LevelIconFactory;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.spi.LoggingEvent;
+
/**
* A specific TableCellRenderer that colourizes a particular cell based on
@@ -60,6 +59,7 @@
private DateFormat dateFormatInUse = DATE_FORMATTER;
private int loggerPrecision = 0;
private boolean toolTipsVisible;
+ private String dateFormatTZ;
/**
* Creates a new TableColorizingRenderer object.
@@ -197,6 +197,11 @@
*/
void setDateFormatter(DateFormat formatter) {
this.dateFormatInUse = formatter;
+ if (dateFormatInUse != null && dateFormatTZ != null && !("".equals(dateFormatTZ))) {
+ dateFormatInUse.setTimeZone(TimeZone.getTimeZone(dateFormatTZ));
+ } else {
+ dateFormatInUse.setTimeZone(TimeZone.getDefault());
+ }
}
/**
@@ -222,6 +227,7 @@
if (!(o instanceof Date)) {
return (o == null ? "" : o);
}
+
return dateFormatInUse.format((Date) o);
}
@@ -240,4 +246,14 @@
public void setLevelUseIcons(boolean levelUseIcons) {
this.levelUseIcons = levelUseIcons;
}
+
+ public void setTimeZone(String dateFormatTZ) {
+ this.dateFormatTZ = dateFormatTZ;
+
+ if (dateFormatInUse != null && dateFormatTZ != null && !("".equals(dateFormatTZ))) {
+ dateFormatInUse.setTimeZone(TimeZone.getTimeZone(dateFormatTZ));
+ } else {
+ dateFormatInUse.setTimeZone(TimeZone.getDefault());
+ }
+ }
}