You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by sd...@apache.org on 2007/08/07 08:49:28 UTC

svn commit: r563406 - in /logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j: net/MulticastAppender.java net/UDPAppender.java varia/LogFilePatternReceiver.java

Author: sdeboy
Date: Mon Aug  6 23:49:27 2007
New Revision: 563406

URL: http://svn.apache.org/viewvc?view=rev&rev=563406
Log:
- added logger.dtd to support processing of java.util.logging dtd-formatted events
- added locationInfo support to multicastappender
(note: no support for MDC or event properties in XMLLayout/1.2 log4j.dtd, so application/hostname properties won't be sent for udp/multicastappender)

- updated logfilepatternreceiver to support tailing over VFS (VFSlogfilepatternreceiver commit will follow shortly)

tested udpappender/receiver, socketappender/receiver, logfilepatternreceiver, xmlsocketreceiver receiving events from java.util.logging sockethandler

Modified:
    logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/MulticastAppender.java
    logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/UDPAppender.java
    logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java

Modified: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/MulticastAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/MulticastAppender.java?view=diff&rev=563406&r1=563405&r2=563406
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/MulticastAppender.java (original)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/MulticastAppender.java Mon Aug  6 23:49:27 2007
@@ -68,6 +68,8 @@
   int port = DEFAULT_PORT;
   MulticastSocket outSocket;
   private String encoding;
+
+  private boolean locationInfo = false;
   
   public MulticastAppender() {
      super(false);
@@ -158,6 +160,10 @@
       return;
     }
 
+    if(locationInfo) {
+	   event.getLocationInformation();
+	}
+
     if (outSocket != null) {
       //if the values already exist, don't set (useful when forwarding from a simplesocketserver
       if (
@@ -169,6 +175,11 @@
           event.setProperty(Constants.APPLICATION_KEY, application);
         }
       }
+      
+		if(locationInfo) {
+		   event.getLocationInformation();
+		}
+
 
       try {
         StringBuffer buf = new StringBuffer(layout.format(event));
@@ -183,9 +194,6 @@
         DatagramPacket dp =
            new DatagramPacket(payload, payload.length, address, port);
         outSocket.send(dp);
-        //remove these properties, in case other appenders need to set them to different values 
-        event.setProperty(Constants.HOSTNAME_KEY, null);
-        event.setProperty(Constants.APPLICATION_KEY, null);
       } catch (IOException e) {
         outSocket = null;
         LogLog.warn("Detected problem with Multicast connection: " + e);
@@ -215,6 +223,22 @@
    */
   public String getRemoteHost() {
     return remoteHost;
+  }
+
+  /**
+  The <b>LocationInfo</b> option takes a boolean value. If true,
+  the information sent to the remote host will include location
+  information. By default no location information is sent to the server.
+   */
+  public void setLocationInfo(boolean locationInfo) {
+	  this.locationInfo = locationInfo;
+  }
+
+  /**
+   * Returns value of the <b>LocationInfo</b> option.
+   */
+  public boolean getLocationInfo() {
+	  return locationInfo;
   }
 
   /**

Modified: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/UDPAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/UDPAppender.java?view=diff&rev=563406&r1=563405&r2=563406
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/UDPAppender.java (original)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/net/UDPAppender.java Mon Aug  6 23:49:27 2007
@@ -218,9 +218,6 @@
         DatagramPacket dp =
            new DatagramPacket(payload, payload.length, address, port);
         outSocket.send(dp);
-        //remove these properties, in case other appenders need to set them to different values 
-        event.setProperty(Constants.HOSTNAME_KEY, null);
-        event.setProperty(Constants.APPLICATION_KEY, null);
       } catch (IOException e) {
         outSocket = null;
         LogLog.warn("Detected problem with UDP connection: " + e);

Modified: logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
URL: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java?view=diff&rev=563406&r1=563405&r2=563406
==============================================================================
--- logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java (original)
+++ logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java Mon Aug  6 23:49:27 2007
@@ -190,9 +190,10 @@
 
   private String regexp;
   private Reader reader;
+  private Pattern regexpPattern;
   private String timestampPatternText;
 
-  private boolean useCurrentThread;
+private boolean useCurrentThread;
 
   public LogFilePatternReceiver() {
     keywords.add(TIMESTAMP);
@@ -262,6 +263,26 @@
   }
 
   /**
+   * When true, this property uses the current Thread to perform the import,
+   * otherwise when false (the default), a new Thread is created and started to manage
+   * the import.
+   * @return
+   */ 
+ public final boolean isUseCurrentThread() {
+     return useCurrentThread;
+ }
+
+ /**
+  * Sets whether the current Thread or a new Thread is created to perform the import,
+  * the default being false (new Thread created).
+  * 
+  * @param useCurrentThread
+  */
+ public final void setUseCurrentThread(boolean useCurrentThread) {
+     this.useCurrentThread = useCurrentThread;
+ }
+
+  /**
    * Accessor
    * 
    * @return log format
@@ -418,56 +439,48 @@
    * @param unbufferedReader
    * @throws IOException
    */
-  protected void process(Reader unbufferedReader) throws IOException {
-    BufferedReader bufferedReader = new BufferedReader(unbufferedReader);
+  protected void process(BufferedReader bufferedReader) throws IOException {
 
-    Perl5Compiler compiler = new Perl5Compiler();
-    Pattern regexpPattern = null;
-    try {
-      regexpPattern = compiler.compile(regexp);
-    } catch (MalformedPatternException mpe) {
-      throw new RuntimeException("Bad pattern: " + regexp);
-    }
+        Perl5Matcher eventMatcher = new Perl5Matcher();
+        String line;
+        while ((line = bufferedReader.readLine()) != null) {
+            if (eventMatcher.matches(line, regexpPattern)) {
+                //build an event from the previous match (held in current map)
+                LoggingEvent event = buildEvent();
+                if (event != null) {
+                    if (passesExpression(event)) {
+                        doPost(event);
+                    }
+                }
+                currentMap.putAll(processEvent(eventMatcher.getMatch()));
+            } else {
+                //getLogger().debug("line doesn't match pattern - must be ")
+                //may be an exception or additional message lines
+                additionalLines.add(line);
+            }
+        }
 
-    Perl5Matcher eventMatcher = new Perl5Matcher(); 
-    String line = null;
-    getLogger().debug("tailing file: " + tailing);
-    do {
-      while ((line = bufferedReader.readLine()) != null) {
-        if (eventMatcher.matches(line, regexpPattern)) {
-          //build an event from the previous match (held in current map)
-          LoggingEvent event = buildEvent();
-          if (event != null) {
+        //process last event if one exists
+        LoggingEvent event = buildEvent();
+        if (event != null) {
             if (passesExpression(event)) {
-              doPost(event);
+                doPost(event);
             }
-          }
-          currentMap.putAll(processEvent(eventMatcher.getMatch()));
-        } else {
-          //getLogger().debug("line doesn't match pattern - must be ")
-          //may be an exception or additional message lines
-          additionalLines.add(line);
+            getLogger().debug("no further lines to process in " + fileURL);
         }
-      }
+    }
 
-      //process last event if one exists
-      LoggingEvent event = buildEvent();
-      if (event != null) {
-        if (passesExpression(event)) {
-          doPost(event);
-        }
-        getLogger().debug("no further lines to process in " + fileURL);
-      }
-      try {
-        synchronized (this) {
-          wait(2000);
+    /**
+     * create the regular expression pattern using the input regular expression
+     */
+    protected void createPattern() {
+        Perl5Compiler compiler = new Perl5Compiler();
+        try {
+            regexpPattern = compiler.compile(regexp);
+        } catch (MalformedPatternException mpe) {
+            throw new RuntimeException("Bad pattern: " + regexp);
         }
-      } catch (InterruptedException ie) {
-      }
-    } while (tailing);
-    getLogger().debug("processing " + fileURL + " complete");
-    shutdown();
-  }
+    }
 
   /**
    * Helper method that supports the evaluation of the expression
@@ -802,57 +815,51 @@
    * Read and process the log file.
    */
   public void activateOptions() {
-    Runnable runnable = new Runnable() {
-      public void run() {
-        initialize();
-        while (reader == null) {
-          getLogger().info("attempting to load file: " + getFileURL());
-	        try {
-	          reader = new InputStreamReader(new URL(getFileURL()).openStream());
-	        } catch (FileNotFoundException fnfe) {
-	          getLogger().info("file not available - will try again in 10 seconds");
-	          synchronized(this) {
-	            try {
-	              wait(10000);
-	            } catch (InterruptedException ie){}
-	          }
-	        } catch (IOException ioe) {
-	          getLogger().warn("unable to load file", ioe);
-	          return;
-	        }
-        } 
-        try {
-          process(reader);
-        } catch (IOException ioe) {
-          //io exception - probably shut down
-          getLogger().info("stream closed");
+	Runnable runnable = new Runnable() {
+	             public void run() {
+                initialize();
+                while (reader == null) {
+                    getLogger().info("attempting to load file: " + getFileURL());
+                    try {
+                        reader = new InputStreamReader(new URL(getFileURL()).openStream());
+                    } catch (FileNotFoundException fnfe) {
+                        getLogger().info("file not available - will try again in 10 seconds");
+                        synchronized (this) {
+                            try {
+                                wait(10000);
+                            } catch (InterruptedException ie) {}
+                        }
+                    } catch (IOException ioe) {
+                        getLogger().warn("unable to load file", ioe);
+                        return;
+                    }
+                }
+                try {
+                    BufferedReader bufferedReader = new BufferedReader(reader);
+                    createPattern();
+                    do {
+                        getLogger().debug("tailing file: " + tailing);
+                        process(bufferedReader);
+                        try {
+                            synchronized (this) {
+                                wait(2000);
+                            }
+                        } catch (InterruptedException ie) {
+                        }
+                    } while (tailing);
+
+                } catch (IOException ioe) {
+                    //io exception - probably shut down
+                    getLogger().info("stream closed");
+                }
+                getLogger().debug("processing " + fileURL + " complete");
+                shutdown();
+            }
+        };
+        if(useCurrentThread) {
+            runnable.run();
+        }else {
+            new Thread(runnable, "LogFilePatternReceiver-"+getName()).start();
         }
-      }
-    };
-    if(useCurrentThread) {
-        runnable.run();
-    }else {
-        new Thread(runnable, "LogFilePatternReceiver-"+getName()).start();
-    }
-  }
-
-     /**
-      * When true, this property uses the current Thread to perform the import,
-      * otherwise when false (the default), a new Thread is created and started to manage
-      * the import.
-      * @return
-      */ 
-    public final boolean isUseCurrentThread() {
-        return useCurrentThread;
-    }
-
-    /**
-     * Sets whether the current Thread or a new Thread is created to perform the import,
-     * the default being false (new Thread created).
-     * 
-     * @param useCurrentThread
-     */
-    public final void setUseCurrentThread(boolean useCurrentThread) {
-        this.useCurrentThread = useCurrentThread;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org