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 2010/04/03 08:19:05 UTC

svn commit: r930482 - in /logging/chainsaw/trunk/src/main: java/org/apache/log4j/chainsaw/ resources/org/apache/log4j/chainsaw/help/

Author: sdeboy
Date: Sat Apr  3 06:19:05 2010
New Revision: 930482

URL: http://svn.apache.org/viewvc?rev=930482&view=rev
Log:
If the file-save as menu is provided a file ending in .zip, a zip file will be created containing an xml file of the event contents.

Fixed a minor bug in the goto-line logic preventing line navigation if a loaded file's rows did not start at 1.

Modified:
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
    logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java?rev=930482&r1=930481&r2=930482&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java Sat Apr  3 06:19:05 2010
@@ -20,13 +20,18 @@ package org.apache.log4j.chainsaw;
 import java.awt.event.ActionEvent;
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
+import java.io.BufferedOutputStream;
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.util.Iterator;
 import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -35,6 +40,7 @@ import javax.swing.JFileChooser;
 import javax.swing.KeyStroke;
 
 import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.helpers.LogLog;
 import org.apache.log4j.spi.LoggingEvent;
 import org.apache.log4j.xml.XMLLayout;
 
@@ -87,38 +93,47 @@ class FileSaveAction extends AbstractAct
     chooser.showSaveDialog(parent);
 
     File selectedFile = chooser.getSelectedFile();
-    XMLLayout layout = new XMLLayout();
-    layout.setProperties(true);
-    LoggingEvent event = null;
-    PrintWriter out = null;
 
     if (selectedFile != null) {
-      try {
-        List v = parent.getCurrentLogPanel().getFilteredEvents();
+    List v = parent.getCurrentLogPanel().getFilteredEvents();
 
-        if (((v != null) && (v.size() == 0)) || (v == null)) {
-          //no events to save
-          return;
-        }
-
-        Iterator iter = v.iterator();
-
-        out =
-          new PrintWriter(new BufferedWriter(new FileWriter(selectedFile)));
-
-        while (iter.hasNext()) {
-          event = (LoggingEvent) iter.next();
-          layout.setLocationInfo(event.getThrowableInformation() != null);
-          out.write(layout.format(event));
-        }
-      } catch (IOException ioe) {
-        ioe.printStackTrace();
-      } finally {
-        if (out != null) {
-          out.flush();
-          out.close();
-        }
+    if (((v != null) && (v.size() == 0)) || (v == null)) {
+      //no events to save
+      return;
+    }
+
+    XMLLayout layout = new XMLLayout();
+    layout.setProperties(true);
+    boolean saveAsZip = selectedFile.getName().toLowerCase().endsWith(".zip");
+    Writer writer = null;
+    try {
+      if (saveAsZip) {
+          ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(selectedFile)));
+          ZipEntry entry = new ZipEntry(selectedFile.getName().substring(0, selectedFile.getName().length() - ".zip".length()) + ".xml");
+          zipOutput.putNextEntry(entry);
+          writer = new OutputStreamWriter(zipOutput);
+      } else {
+          writer = new BufferedWriter(new FileWriter(selectedFile));
+      }
+      Iterator iter = v.iterator();
+      while (iter.hasNext()) {
+        LoggingEvent event = (LoggingEvent) iter.next();
+        layout.setLocationInfo(event.getThrowableInformation() != null);
+        writer.write(layout.format(event));
+      }
+    } catch (IOException ioe) {
+      LogLog.warn("Unable to save file", ioe);
+    } finally {
+      if (writer != null) {
+          try {
+              writer.flush();
+              writer.close();
+          }
+          catch (IOException e1) {
+              //ignore
+          }
       }
     }
   }
+  }
 }

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=930482&r1=930481&r2=930482&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 Sat Apr  3 06:19:05 2010
@@ -205,8 +205,7 @@ import com.thoughtworks.xstream.io.xml.D
  *@author Isuru Suriarachchi
  *
  */
-public class LogPanel extends DockablePanel implements EventBatchListener,
-  Profileable {
+public class LogPanel extends DockablePanel implements EventBatchListener, Profileable {
   private static final double DEFAULT_DETAIL_SPLIT_LOCATION = 0.56d;
   private static final double DEFAULT_LOG_TREE_SPLIT_LOCATION = 0.2d;
   private final String identifier;
@@ -277,28 +276,16 @@ public class LogPanel extends DockablePa
     findPanel.setMinimumSize(findPanelSize);
 
     final Map columnNameKeywordMap = new HashMap();
-    columnNameKeywordMap.put(
-      ChainsawConstants.CLASS_COL_NAME, LoggingEventFieldResolver.CLASS_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.FILE_COL_NAME, LoggingEventFieldResolver.FILE_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.LEVEL_COL_NAME, LoggingEventFieldResolver.LEVEL_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.LINE_COL_NAME, LoggingEventFieldResolver.LINE_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.LOGGER_COL_NAME, LoggingEventFieldResolver.LOGGER_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.NDC_COL_NAME, LoggingEventFieldResolver.NDC_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.MESSAGE_COL_NAME, LoggingEventFieldResolver.MSG_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.THREAD_COL_NAME, LoggingEventFieldResolver.THREAD_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.THROWABLE_COL_NAME,
-      LoggingEventFieldResolver.EXCEPTION_FIELD);
-    columnNameKeywordMap.put(
-      ChainsawConstants.TIMESTAMP_COL_NAME,
-      LoggingEventFieldResolver.TIMESTAMP_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.CLASS_COL_NAME, LoggingEventFieldResolver.CLASS_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.FILE_COL_NAME, LoggingEventFieldResolver.FILE_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.LEVEL_COL_NAME, LoggingEventFieldResolver.LEVEL_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.LINE_COL_NAME, LoggingEventFieldResolver.LINE_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.LOGGER_COL_NAME, LoggingEventFieldResolver.LOGGER_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.NDC_COL_NAME, LoggingEventFieldResolver.NDC_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.MESSAGE_COL_NAME, LoggingEventFieldResolver.MSG_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.THREAD_COL_NAME, LoggingEventFieldResolver.THREAD_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.THROWABLE_COL_NAME, LoggingEventFieldResolver.EXCEPTION_FIELD);
+    columnNameKeywordMap.put(ChainsawConstants.TIMESTAMP_COL_NAME, LoggingEventFieldResolver.TIMESTAMP_FIELD);
 
     preferencesFrame.setTitle("'" + identifier + "' Log Panel Preferences");
     preferencesFrame.setIconImage(
@@ -1969,10 +1956,14 @@ public class LogPanel extends DockablePa
    * Change the selected event on the log panel
    *
    * @param eventNumber
+   * @return row number or -1 if row with log4jid property with that number was not found
    */
-  void setSelectedEvent(int eventNumber) {
+  int setSelectedEvent(int eventNumber) {
       int row = tableModel.find(ExpressionRule.getRule("prop.log4jid == " + eventNumber), 0, true);
-      table.scrollTo(row, 0);
+      if (row > -1) {
+        table.scrollTo(row, 0);
+      }
+      return row;
   }
 
   /**

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java?rev=930482&r1=930481&r2=930482&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java Sat Apr  3 06:19:05 2010
@@ -817,9 +817,8 @@ public class LogUI extends JFrame implem
         	  int lineNumber = Integer.parseInt(inputLine);
               List eventList = getCurrentLogPanel().getEvents();
 
-              if (lineNumber > 0 && lineNumber <= eventList.size()) {
-                  getCurrentLogPanel().setSelectedEvent(lineNumber);
-              } else {
+              int row = getCurrentLogPanel().setSelectedEvent(lineNumber);
+              if (row == -1) {
                   JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", 0);
               }
           } catch (NumberFormatException nfe) {

Modified: logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html?rev=930482&r1=930481&r2=930482&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html (original)
+++ logging/chainsaw/trunk/src/main/resources/org/apache/log4j/chainsaw/help/release-notes.html Sat Apr  3 06:19:05 2010
@@ -10,13 +10,19 @@
 <b>NOTE:</b> The mechanism and format used to persist settings in Chainsaw is subject to change.  If you are experiencing problems displaying events in Chainsaw, please delete everything in the $user.dir/.chainsaw directory and restart Chainsaw.
 <br>
 <h1>1.99.99</h1>
+<h2>2 Apr 2010</h2>
+<ul>
+<li>
+If the file-save as menu is provided a file ending in .zip, a zip file will be created containing an xml file of the event contents.  By default, file-save as 
+just creates a text file containing the xml events.
+</li>
+</ul>
 <h2>1 Apr 2010</h2>
 <ul>
 <li>
 Updated thumbnail bar to display all events with a defined color (will include the default color rules for marker, warning, error & fatal events).
 Added search matches to thumbnail bar (will display black in the left half of the row if the row matches the search expression.
 Added ctrl-n to go to next colorized event, ctrl-p to go to previous colorized event.
-
 </li>
 </ul>
 <h2>27 Mar 2010</h2>