Author: ravn Date: Sat Oct 4 00:49:33 2008 New Revision: 1182 Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/LogTransformer.java
Log: added log level option, default=info Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/LogTransformer.java ============================================================================== --- slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/LogTransformer.java (original) +++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/instrumentation/LogTransformer.java Sat Oct 4 00:49:33 2008 @@ -77,20 +77,42 @@ verbose = b; return this; } - - String[] ignore = { "sun/", "java/", "javax/", "org/slf4j/", - "ch/qos/logback/" , "org/apache/log4j/"}; + + String[] ignore = { "sun/", "java/", "javax/", "org/slf4j/", + "ch/qos/logback/", "org/apache/log4j/" }; + public Builder ignore(String[] strings) { this.ignore = strings; return this; } + + private String level = "info"; + + public Builder level(String level) { + level = level.toLowerCase(); + if (level.equals("info") || level.equals("debug") + || level.equals("trace")) { + this.level = level; + } else { + if (verbose) { + System.err.println("level not info/debug/trace : " + level); + } + } + return this; + } } + private String level; + private String levelEnabled; + private LogTransformer(Builder builder) { this.addEntryExit = builder.addEntryExit; this.addVariableAssignment = builder.addVariableAssignment; this.verbose = builder.verbose; this.ignore = builder.ignore; + this.level = builder.level; + this.levelEnabled = "is" + builder.level.substring(0, 1).toUpperCase() + + builder.level.substring(1) + "Enabled"; } private static final String _LOG = "_log"; @@ -102,7 +124,6 @@ public byte[] transform(ClassLoader loader, String className, Class<?> clazz, ProtectionDomain domain, byte[] bytes) { - try { return transform0(className, clazz, bytes); @@ -182,6 +203,7 @@ } catch (Exception e) { String pattern = "Could not instrument {}, exception : {}"; System.err.println(format(pattern, name, e.getMessage())); + e.printStackTrace(System.err); } finally { if (cl != null) { cl.detach(); @@ -197,14 +219,16 @@ String returnValue = JavassistHelper.returnValue(method); if (addEntryExit) { - String messagePattern = "if ({}.isDebugEnabled()) {}.info(\">> {}\");"; - Object[] arg1 = new Object[] { _LOG, _LOG, signature }; + String messagePattern = "if ({}.{}()) {}.{}(\">> {}\");"; + Object[] arg1 = new Object[] { _LOG, levelEnabled, _LOG, level, + signature }; String before = MessageFormatter.arrayFormat(messagePattern, arg1); //System.out.println(before); method.insertBefore(before); - String messagePattern2 = "if ({}.isDebugEnabled()) {}.info(\"<< {}{}\");"; - Object[] arg2 = new Object[] { _LOG, _LOG, signature, returnValue }; + String messagePattern2 = "if ({}.{}()) {}.{}(\"<< {}{}\");"; + Object[] arg2 = new Object[] { _LOG, levelEnabled, _LOG, level, + signature, returnValue }; String after = MessageFormatter.arrayFormat(messagePattern2, arg2); //System.out.println(after); method.insertAfter(after); _______________________________________________ dev mailing list dev@slf4j.org http://www.slf4j.org/mailman/listinfo/dev