[slf4j-dev] svn commit: r1262 - in slf4j/trunk/slf4j-ext/src/main/java/org/slf4j: agent instrumentation

ravn at slf4j.org ravn at slf4j.org
Sat Dec 27 22:35:01 CET 2008


Author: ravn
Date: Sat Dec 27 22:35:01 2008
New Revision: 1262

Modified:
   slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/agent/AgentPremain.java
   slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/ToStringHelper.java

Log:
accidentially used MessageFormatter in agent, that code is not visible there

Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/agent/AgentPremain.java
==============================================================================
--- slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/agent/AgentPremain.java	(original)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/agent/AgentPremain.java	Sat Dec 27 22:35:01 2008
@@ -1,7 +1,5 @@
 package org.slf4j.agent;
 
-import static org.slf4j.helpers.MessageFormatter.format;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.lang.instrument.Instrumentation;
@@ -16,92 +14,94 @@
  */
 public class AgentPremain {
 
-  private static final String START_MSG = "Start at {}";
-  private static final String STOP_MSG = "Stop at {}, execution time = {} ms";
-
-  /**
-   * JavaAgent premain entry point as specified in the MANIFEST.MF file. See
-   * {@link http://java.sun.com/javase/6/docs/api/java/lang/instrument/package-summary.html}
-   *  for details.
-   * 
-   * @param agentArgument
-   *          string provided after "=" up to first space
-   * @param instrumentation
-   *          instrumentation environment provided by the JVM
-   */
-  public static void premain(String agentArgument,
-      Instrumentation instrumentation) {
-
-    LogTransformer.Builder builder = new LogTransformer.Builder();
-    builder = builder.addEntryExit(true);
-
-    if (agentArgument != null) {
-      Properties args = parseArguments(agentArgument, ",");
-
-      if (args.containsKey(AgentOptions.VERBOSE)) {
-        builder = builder.verbose(true);
-      }
-
-      if (args.containsKey(AgentOptions.TIME)) {
-        printStartStopTimes();
-      }
-
-      if (args.containsKey(AgentOptions.IGNORE)) {
-        String ignore = args.getProperty(AgentOptions.IGNORE);
-        builder = builder.ignore(ignore.split(":"));
-      }
-
-      if (args.containsKey(AgentOptions.LEVEL)) {
-        builder = builder.level(args.getProperty(AgentOptions.LEVEL));
-      }
-    }
-
-    instrumentation.addTransformer(builder.build());
-  }
-
-  /**
-   * Consider the argument string to be a property file (by converting the
-   * splitter character to line feeds), and then reading it like any other
-   * property file.
-   * 
-   * 
-   * @param agentArgument
-   *          string given by instrumentation framework
-   * @param separator
-   *          String to convert to line feeds
-   * @return argument converted to properties
-   */
-  private static Properties parseArguments(String agentArgument,
-      String separator) {
-    Properties p = new Properties();
-    try {
-      String argumentAsLines = agentArgument.replaceAll(separator, "\n");
-      p.load(new ByteArrayInputStream(argumentAsLines.getBytes()));
-    } catch (IOException e) {
-      String s = "Could not load arguments as properties";
-      throw new RuntimeException(s, e);
-    }
-    return p;
-  }
-
-  /**
-   * Print the start message to System.err with the time NOW, and register a
-   * shutdown hook which will print the stop message to System.err with the time
-   * then and the number of milliseconds passed since.
-   * 
-   */
-  private static void printStartStopTimes() {
-    final long start = System.currentTimeMillis();
-    System.err.println(format(START_MSG, new Date()));
-
-    Thread hook = new Thread() {
-      @Override
-      public void run() {
-        long timePassed = System.currentTimeMillis() - start;
-        String message = format(STOP_MSG, new Date(), timePassed);
-        System.err.println(message);
-      }
-    };
-    Runtime.getRuntime().addShutdownHook(hook);
-  }
+	/**
+	 * JavaAgent premain entry point as specified in the MANIFEST.MF file. See
+	 * {@link http
+	 * ://java.sun.com/javase/6/docs/api/java/lang/instrument/package-
+	 * summary.html} for details.
+	 * 
+	 * @param agentArgument
+	 *            string provided after "=" up to first space
+	 * @param instrumentation
+	 *            instrumentation environment provided by the JVM
+	 */
+	public static void premain(String agentArgument,
+			Instrumentation instrumentation) {
+
+		// We cannot do sanity checks for slf4j here as the jars loaded
+		// by the application are not visible here.
+
+		LogTransformer.Builder builder = new LogTransformer.Builder();
+		builder = builder.addEntryExit(true);
+
+		if (agentArgument != null) {
+			Properties args = parseArguments(agentArgument, ",");
+
+			if (args.containsKey(AgentOptions.VERBOSE)) {
+				builder = builder.verbose(true);
+			}
+
+			if (args.containsKey(AgentOptions.TIME)) {
+				printStartStopTimes();
+			}
+
+			if (args.containsKey(AgentOptions.IGNORE)) {
+				String ignore = args.getProperty(AgentOptions.IGNORE);
+				builder = builder.ignore(ignore.split(":"));
+			}
+
+			if (args.containsKey(AgentOptions.LEVEL)) {
+				builder = builder.level(args.getProperty(AgentOptions.LEVEL));
+			}
+		}
+
+		instrumentation.addTransformer(builder.build());
+	}
+
+	/**
+	 * Consider the argument string to be a property file (by converting the
+	 * splitter character to line feeds), and then reading it like any other
+	 * property file.
+	 * 
+	 * 
+	 * @param agentArgument
+	 *            string given by instrumentation framework
+	 * @param separator
+	 *            String to convert to line feeds
+	 * @return argument converted to properties
+	 */
+	private static Properties parseArguments(String agentArgument,
+			String separator) {
+		Properties p = new Properties();
+		try {
+			String argumentAsLines = agentArgument.replaceAll(separator, "\n");
+			p.load(new ByteArrayInputStream(argumentAsLines.getBytes()));
+		} catch (IOException e) {
+			String s = "Could not load arguments as properties";
+			throw new RuntimeException(s, e);
+		}
+		return p;
+	}
+
+	/**
+	 * Print the start message to System.err with the time NOW, and register a
+	 * shutdown hook which will print the stop message to System.err with the
+	 * time then and the number of milliseconds passed since.
+	 * 
+	 */
+	private static void printStartStopTimes() {
+		final long start = System.currentTimeMillis();
+
+		System.err.println("Start at " + new Date());
+
+		Thread hook = new Thread() {
+			@Override
+			public void run() {
+				long timePassed = System.currentTimeMillis() - start;
+				System.err.println("Stop at " + new Date()
+						+ ", execution time = " + timePassed + " ms");
+			}
+		};
+		Runtime.getRuntime().addShutdownHook(hook);
+	}
 }
\ No newline at end of file

Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/ToStringHelper.java
==============================================================================
--- slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/ToStringHelper.java	(original)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/ToStringHelper.java	Sat Dec 27 22:35:01 2008
@@ -32,7 +32,7 @@
 	 * System.currentTimeMilis when an instance of the class failed to render.
 	 */
 
-	final static Map<Class, Object> unrenderableClasses = new WeakHashMap<Class, Object>();
+	final static Map<Class<?>, Object> unrenderableClasses = new WeakHashMap<Class<?>, Object>();
 
 	/**
 	 * Returns o.toString() unless it throws an exception (which causes it to be
@@ -48,7 +48,7 @@
 		if (o == null) {
 			return String.valueOf(o);
 		}
-		Class objectClass = o.getClass();
+		Class<?> objectClass = o.getClass();
 		if (unrenderableClasses.containsKey(objectClass) == false) {
 			try {
 				if (objectClass.isArray()) {
@@ -58,6 +58,8 @@
 				}
 			} catch (Exception e) {
 				Long now = new Long(System.currentTimeMillis());
+				System.err.println("Disabling exception throwing class "
+						+ objectClass.getName() + ", " + e.getMessage());
 				unrenderableClasses.put(objectClass, now);
 			}
 		}
@@ -74,8 +76,8 @@
 	 * @param objectClass
 	 * @return
 	 */
-	private static StringBuffer renderArray(Object o, Class objectClass) {
-		Class componentType = objectClass.getComponentType();
+	private static StringBuffer renderArray(Object o, Class<?> objectClass) {
+		Class<?> componentType = objectClass.getComponentType();
 		StringBuffer sb = new StringBuffer(ARRAY_PREFIX);
 
 		if (componentType.isPrimitive() == false) {



More information about the slf4j-dev mailing list