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/08/20 06:47:45 UTC

svn commit: r687241 - in /logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw: LogUI.java receivers/ReceiversPanel.java vfs/VFSLogFilePatternReceiver.java

Author: sdeboy
Date: Tue Aug 19 21:47:45 2008
New Revision: 687241

URL: http://svn.apache.org/viewvc?rev=687241&view=rev
Log:
ensure all org.apache loggers used by chainsaw and plugins get routed to the chainsaw-log tab

set vfs cache logger to info because debug-level logging can contain username/password

on receiver restart, provide visualreceivers with their needed container

remove vfslogfilepatternreceiver logging which could container username/password

improve vfslogfilepatternreceiver support for restarting the receiver

Modified:
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/LogUI.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
    logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java

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=687241&r1=687240&r2=687241&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 Tue Aug 19 21:47:45 2008
@@ -334,7 +334,7 @@
     logUI.ensureChainsawAppenderHandlerAdded();
     logger = LogManager.getLogger(LogUI.class);
 
-    //set hostname & application properties which will cause Chainsaw-generated
+    //set hostname & application properties which will cause Chainsaw and other apache-generated
     //logging events to route (by default) to a tab named 'chainsaw-log'
     PropertyRewritePolicy policy = new PropertyRewritePolicy();
     policy.setProperties("hostname=chainsaw,application=log");
@@ -342,7 +342,7 @@
     RewriteAppender rewriteAppender = new RewriteAppender();
     rewriteAppender.setRewritePolicy(policy);
 
-    Enumeration appenders = Logger.getLogger("org.apache.log4j").getAllAppenders();
+    Enumeration appenders = Logger.getLogger("org.apache").getAllAppenders();
     if (!appenders.hasMoreElements()) {
     	appenders = Logger.getRootLogger().getAllAppenders();
     }
@@ -350,9 +350,11 @@
     	Appender nextAppender = (Appender)appenders.nextElement();
     	rewriteAppender.addAppender(nextAppender);
     }
-    Logger.getLogger("org.apache.log4j").removeAllAppenders();
-    Logger.getLogger("org.apache.log4j").addAppender(rewriteAppender);
-    Logger.getLogger("org.apache.log4j").setAdditivity(false);
+    Logger.getLogger("org.apache").removeAllAppenders();
+    Logger.getLogger("org.apache").addAppender(rewriteAppender);
+    Logger.getLogger("org.apache").setAdditivity(false);
+    //set the commons.vfs.cache logger to info, since it can contain password information
+    Logger.getLogger("org.apache.commons.vfs.cache").setLevel(Level.INFO);
     
     Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
 		public void uncaughtException(Thread t, Throwable e) {

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java?rev=687241&r1=687240&r2=687241&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java Tue Aug 19 21:47:45 2008
@@ -303,6 +303,10 @@
               }
               selectedReceiver.shutdown();
               selectedReceiver.activateOptions();
+              //allow the visual receiver to get a container on restart
+              if (selectedReceiver instanceof VisualReceiver) {
+                  ((VisualReceiver)selectedReceiver).setContainer(ReceiversPanel.this);
+              }
             }
           };
 

Modified: logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
URL: http://svn.apache.org/viewvc/logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java?rev=687241&r1=687240&r2=687241&view=diff
==============================================================================
--- logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java (original)
+++ logging/chainsaw/trunk/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java Tue Aug 19 21:47:45 2008
@@ -222,8 +222,8 @@
    * Read and process the log file.
    */
   public void activateOptions() {
-	  
-      if (promptForUserInfo) {
+      //on receiver restart, only prompt for credentials if we don't already have them
+      if (promptForUserInfo && getFileURL().indexOf("@") == -1) {
     	  /*
     	  if promptforuserinfo is true, wait for a reference to the container 
     	  (via the VisualReceiver callback).
@@ -303,7 +303,8 @@
   private class VFSReader implements Runnable {
         public void run() {
         	FileObject fileObject = null;
-            while (reader == null) {
+        	//thread should end when we're no longer active
+            while (reader == null && isActive()) {
             	int atIndex = getFileURL().indexOf("@");
             	int protocolIndex = getFileURL().indexOf("://");
             	
@@ -315,7 +316,7 @@
                     //if jsch not in classpath, can get NoClassDefFoundError here
                     try {
                     	SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
-                    	SftpFileSystemConfigBuilder.getInstance().setUserInfo(opts, new MyUserInfo());
+                    	SftpFileSystemConfigBuilder.getInstance().setUserInfo(opts, new MyUserInfo(password));
                     } catch (NoClassDefFoundError ncdfe) {
                     	getLogger().warn("JSch not on classpath!", ncdfe);
                     }
@@ -353,7 +354,7 @@
                     //if jsch not in classpath, can get NoClassDefFoundError here
                     try {
                     	SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
-                    	SftpFileSystemConfigBuilder.getInstance().setUserInfo(opts, new MyUserInfo());
+                    	SftpFileSystemConfigBuilder.getInstance().setUserInfo(opts, new MyUserInfo(password));
                     } catch (NoClassDefFoundError ncdfe) {
                     	getLogger().warn("JSch not on classpath!", ncdfe);
                     }
@@ -388,9 +389,9 @@
                 } while (isTailing());
 
             } catch (IOException ioe) {
-                getLogger().info("stream closed");
+                getLogger().info("stream closed", ioe);
             }
-            getLogger().debug("processing " + getFileURL() + " complete");
+            getLogger().debug("processing complete");
             shutdown();
         }
     }
@@ -474,9 +475,14 @@
    * 
    * @author sdeboy
    */
-  public class MyUserInfo implements UserInfo, UIKeyboardInteractive {
+  public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
+    private final String thisPassword;
+    
+    public MyUserInfo(String thisPassword) {
+        this.thisPassword = thisPassword;
+    }
 	public String[] promptKeyboardInteractive(String destination, String loginName, String instruction, String[] prompt, boolean[] echo) {
-		return new String[]{password};
+		return new String[]{thisPassword};
 	}
 
 	public String getPassphrase() {