public class LogTransformer
extends java.lang.Object
implements java.lang.instrument.ClassFileTransformer
LogTransformer does the work of analyzing each class, and if appropriate add log statements to each method to allow logging entry/exit.
This class is based on the article Add Logging at Class Load Time with Java Instrumentation.
| Modifier and Type | Class and Description |
|---|---|
static class |
LogTransformer.Builder
Builder provides a flexible way of configuring some of many options on the
parent class instead of providing many constructors.
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
addEntryExit |
private java.lang.String[] |
ignore |
private java.lang.String |
level |
private java.lang.String |
levelEnabled |
private java.lang.String |
loggerName |
private boolean |
verbose |
| Modifier | Constructor and Description |
|---|---|
private |
LogTransformer(LogTransformer.Builder builder) |
| Modifier and Type | Method and Description |
|---|---|
private byte[] |
doClass(java.lang.String name,
java.lang.Class<?> clazz,
byte[] b)
doClass() process a single class by first creates a class description from
the byte codes.
|
private void |
doMethod(javassist.CtBehavior method)
process a single method - this means add entry/exit logging if requested.
|
byte[] |
transform(java.lang.ClassLoader loader,
java.lang.String className,
java.lang.Class<?> clazz,
java.security.ProtectionDomain domain,
byte[] bytes) |
private byte[] |
transform0(java.lang.String className,
java.lang.Class<?> clazz,
java.security.ProtectionDomain domain,
byte[] bytes)
transform0 sees if the className starts with any of the namespaces to
ignore, if so it is returned unchanged.
|
private java.lang.String level
private java.lang.String levelEnabled
private boolean addEntryExit
private boolean verbose
private java.lang.String[] ignore
private java.lang.String loggerName
private LogTransformer(LogTransformer.Builder builder)
public byte[] transform(java.lang.ClassLoader loader,
java.lang.String className,
java.lang.Class<?> clazz,
java.security.ProtectionDomain domain,
byte[] bytes)
transform in interface java.lang.instrument.ClassFileTransformerprivate byte[] transform0(java.lang.String className,
java.lang.Class<?> clazz,
java.security.ProtectionDomain domain,
byte[] bytes)
className - clazz - domain - bytes - private byte[] doClass(java.lang.String name,
java.lang.Class<?> clazz,
byte[] b)
name - class name (slashes separate, not dots)clazz - b - private void doMethod(javassist.CtBehavior method)
throws javassist.NotFoundException,
javassist.CannotCompileException
method - method to work onjavassist.NotFoundExceptionjavassist.CannotCompileException