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 );
}
}
}