You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/02/27 02:47:26 UTC

svn commit: r1572388 - in /incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent: listener/PathTrackingInvocationListener.java logging/SironaAgentLogging.java

Author: olamy
Date: Thu Feb 27 01:47:26 2014
New Revision: 1572388

URL: http://svn.apache.org/r1572388
Log:
remove crappy hack, so study stack trace to detect if we are in a recursive path

Modified:
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/logging/SironaAgentLogging.java

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java?rev=1572388&r1=1572387&r2=1572388&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationListener.java Thu Feb 27 01:47:26 2014
@@ -64,16 +64,7 @@ public class PathTrackingInvocationListe
     {
 
         String key = context.getKey();
-        // FIXME olamy: yup I know very hackishhhh but generate a StackOverflow as the System.out is redirected
-        // to Tomcat SystemLogHandler
-        // FIXME maybe using Thread.currentThread().getStackTrace() in the logger?
-        if (!"org.apache.tomcat.util.log.SystemLogHandler.println".equals( key ))
-        {
-            SironaAgentLogging.debug( "PathTrackingInvocationListener#before: {0}", key );
-        } else {
-            // no log for this case
-            int i=1;
-        }
+        SironaAgentLogging.debug( "PathTrackingInvocationListener#before: {0}", key );
 
         int lastDot = key.lastIndexOf( "." );
 
@@ -83,10 +74,8 @@ public class PathTrackingInvocationListe
         final PathTracker.PathTrackingInformation pathTrackingInformation =
             new PathTracker.PathTrackingInformation( className, methodName );
 
-        if (!"org.apache.tomcat.util.log.SystemLogHandler.println".equals( key ))
-        {
-            SironaAgentLogging.debug( "call PathTracker#start with {0}", pathTrackingInformation );
-        }
+        SironaAgentLogging.debug( "call PathTracker#start with {0}", pathTrackingInformation );
+
         context.put( PATH_TRACKER_KEY, org.apache.sirona.tracking.PathTracker.start( pathTrackingInformation ) );
     }
 

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/logging/SironaAgentLogging.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/logging/SironaAgentLogging.java?rev=1572388&r1=1572387&r2=1572388&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/logging/SironaAgentLogging.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/logging/SironaAgentLogging.java Thu Feb 27 01:47:26 2014
@@ -28,17 +28,41 @@ public class SironaAgentLogging
     public static boolean AGENT_DEBUG = Boolean.getBoolean( "sirona.agent.debug" );
 
     /**
-     *
      * @param message very simple usage so we {@link java.text.MessageFormat}
      * @param objects
      */
-    public static void debug(String message, Object... objects){
-        if (AGENT_DEBUG){
-            if (objects != null)
+    public static void debug( String message, Object... objects )
+    {
+        if ( AGENT_DEBUG )
+        {
+
+            // to prevent StackOverflowError we need to detect if this debug call is already in the call stack
+            // typical case is Tomcat redirecting System.out/err to his own log handler
+            // so as we instrument Tomcat this goes to a StackOverflowError
+            StackTraceElement[] elements = Thread.currentThread().getStackTrace();
+            int foundCall = 0;
+            for ( StackTraceElement stackTraceElement : elements )
+            {
+                if ( SironaAgentLogging.class.getName().equals( stackTraceElement.getClassName() ) //
+                    && "debug".equals( stackTraceElement.getMethodName() ) )
+                {
+                    foundCall++;
+                }
+            }
+
+            // skip this call as we are probably in a recursive without any end
+            if ( foundCall >= 2 )
+            {
+                return;
+            }
+
+            if ( objects != null )
+            {
+                System.out.println( MessageFormat.format( message, objects ) );
+            }
+            else
             {
-                System.out.println( MessageFormat.format( message, objects ));
-            } else {
-                System.out.println(message);
+                System.out.println( message );
             }
         }
     }