[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