public class CustomizableTraceInterceptor extends AbstractTraceInterceptor
MethodInterceptor
implementation that allows for highly customizable
method-level tracing, using placeholders.
Trace messages are written on method entry, and if the method invocation succeeds on method exit. If an invocation results in an exception, then an exception message is written. The contents of these trace messages is fully customizable and special placeholders are available to allow you to include runtime information in your log messages. The placeholders available are:
$[methodName]
- replaced with the name of the method being invoked$[targetClassName]
- replaced with the name of the class that is
the target of the invocation$[targetClassShortName]
- replaced with the short name of the class
that is the target of the invocation$[returnValue]
- replaced with the value returned by the invocation$[argumentTypes]
- replaced with a comma-separated list of the
short class names of the method arguments$[arguments]
- replaced with a comma-separated list of the
String
representation of the method arguments$[exception]
- replaced with the String
representation
of any Throwable
raised during the invocation$[invocationTime]
- replaced with the time, in milliseconds,
taken by the method invocationThere are restrictions on which placeholders can be used in which messages: see the individual message properties for details on the valid placeholders.
setEnterMessage(java.lang.String)
,
setExitMessage(java.lang.String)
,
setExceptionMessage(java.lang.String)
,
SimpleTraceInterceptor
,
Serialized FormModifier and Type | Field and Description |
---|---|
private static java.util.Set<java.lang.Object> |
ALLOWED_PLACEHOLDERS
The
Set of allowed placeholders. |
private static java.lang.String |
DEFAULT_ENTER_MESSAGE
The default message used for writing method entry messages.
|
private static java.lang.String |
DEFAULT_EXCEPTION_MESSAGE
The default message used for writing exception messages.
|
private static java.lang.String |
DEFAULT_EXIT_MESSAGE
The default message used for writing method exit messages.
|
private java.lang.String |
enterMessage
The message for method entry.
|
private java.lang.String |
exceptionMessage
The message for exceptions during method execution.
|
private java.lang.String |
exitMessage
The message for method exit.
|
private static java.util.regex.Pattern |
PATTERN
The
Pattern used to match placeholders. |
static java.lang.String |
PLACEHOLDER_ARGUMENT_TYPES
The
$[argumentTypes] placeholder. |
static java.lang.String |
PLACEHOLDER_ARGUMENTS
The
$[arguments] placeholder. |
static java.lang.String |
PLACEHOLDER_EXCEPTION
The
$[exception] placeholder. |
static java.lang.String |
PLACEHOLDER_INVOCATION_TIME
The
$[invocationTime] placeholder. |
static java.lang.String |
PLACEHOLDER_METHOD_NAME
The
$[methodName] placeholder. |
static java.lang.String |
PLACEHOLDER_RETURN_VALUE
The
$[returnValue] placeholder. |
static java.lang.String |
PLACEHOLDER_TARGET_CLASS_NAME
The
$[targetClassName] placeholder. |
static java.lang.String |
PLACEHOLDER_TARGET_CLASS_SHORT_NAME
The
$[targetClassShortName] placeholder. |
defaultLogger
Constructor and Description |
---|
CustomizableTraceInterceptor() |
Modifier and Type | Method and Description |
---|---|
private void |
appendArgumentTypes(MethodInvocation methodInvocation,
java.util.regex.Matcher matcher,
java.lang.StringBuffer output)
Adds a comma-separated list of the short
Class names of the
method argument types to the output. |
private void |
appendReturnValue(MethodInvocation methodInvocation,
java.util.regex.Matcher matcher,
java.lang.StringBuffer output,
java.lang.Object returnValue)
Adds the
String representation of the method return value
to the supplied StringBuffer . |
private void |
checkForInvalidPlaceholders(java.lang.String message)
Checks to see if the supplied
String has any placeholders
that are not specified as constants on this class and throws an
IllegalArgumentException if so. |
protected java.lang.Object |
invokeUnderTrace(MethodInvocation invocation,
Log logger)
Writes a log message before the invocation based on the value of
enterMessage . |
protected java.lang.String |
replacePlaceholders(java.lang.String message,
MethodInvocation methodInvocation,
java.lang.Object returnValue,
java.lang.Throwable throwable,
long invocationTime)
Replace the placeholders in the given message with the supplied values,
or values derived from those supplied.
|
void |
setEnterMessage(java.lang.String enterMessage)
Set the template used for method entry log messages.
|
void |
setExceptionMessage(java.lang.String exceptionMessage)
Set the template used for method exception log messages.
|
void |
setExitMessage(java.lang.String exitMessage)
Set the template used for method exit log messages.
|
protected void |
writeToLog(Log logger,
java.lang.String message)
Writes the supplied message to the supplied
Log instance. |
protected void |
writeToLog(Log logger,
java.lang.String message,
java.lang.Throwable ex)
Writes the supplied message and
Throwable to the
supplied Log instance. |
getClassForLogging, getLoggerForInvocation, invoke, isInterceptorEnabled, isLogEnabled, setHideProxyClassNames, setLoggerName, setUseDynamicLogger
public static final java.lang.String PLACEHOLDER_METHOD_NAME
$[methodName]
placeholder.
Replaced with the name of the method being invoked.public static final java.lang.String PLACEHOLDER_TARGET_CLASS_NAME
$[targetClassName]
placeholder.
Replaced with the fully-qualifed name of the Class
of the method invocation target.public static final java.lang.String PLACEHOLDER_TARGET_CLASS_SHORT_NAME
$[targetClassShortName]
placeholder.
Replaced with the short name of the Class
of the
method invocation target.public static final java.lang.String PLACEHOLDER_RETURN_VALUE
$[returnValue]
placeholder.
Replaced with the String
representation of the value
returned by the method invocation.public static final java.lang.String PLACEHOLDER_ARGUMENT_TYPES
$[argumentTypes]
placeholder.
Replaced with a comma-separated list of the argument types for the
method invocation. Argument types are written as short class names.public static final java.lang.String PLACEHOLDER_ARGUMENTS
$[arguments]
placeholder.
Replaced with a comma separated list of the argument values for the
method invocation. Relies on the toString()
method of
each argument type.public static final java.lang.String PLACEHOLDER_EXCEPTION
$[exception]
placeholder.
Replaced with the String
representation of any
Throwable
raised during method invocation.public static final java.lang.String PLACEHOLDER_INVOCATION_TIME
$[invocationTime]
placeholder.
Replaced with the time taken by the invocation (in milliseconds).private static final java.lang.String DEFAULT_ENTER_MESSAGE
private static final java.lang.String DEFAULT_EXIT_MESSAGE
private static final java.lang.String DEFAULT_EXCEPTION_MESSAGE
private static final java.util.regex.Pattern PATTERN
Pattern
used to match placeholders.private static final java.util.Set<java.lang.Object> ALLOWED_PLACEHOLDERS
Set
of allowed placeholders.private java.lang.String enterMessage
private java.lang.String exitMessage
private java.lang.String exceptionMessage
public void setEnterMessage(java.lang.String enterMessage) throws java.lang.IllegalArgumentException
$[targetClassName]
$[targetClassShortName]
$[argumentTypes]
$[arguments]
java.lang.IllegalArgumentException
public void setExitMessage(java.lang.String exitMessage)
$[targetClassName]
$[targetClassShortName]
$[argumentTypes]
$[arguments]
$[returnValue]
$[invocationTime]
public void setExceptionMessage(java.lang.String exceptionMessage)
$[targetClassName]
$[targetClassShortName]
$[argumentTypes]
$[arguments]
$[exception]
protected java.lang.Object invokeUnderTrace(MethodInvocation invocation, Log logger) throws java.lang.Throwable
enterMessage
.
If the invocation succeeds, then a log message is written on exit based on the value
exitMessage
. If an exception occurs during invocation, then a message is
written based on the value of exceptionMessage
.invokeUnderTrace
in class AbstractTraceInterceptor
logger
- the Log
to write trace messages toMethodInvocation.proceed()
java.lang.Throwable
- if the call to MethodInvocation.proceed()
encountered any errorssetEnterMessage(java.lang.String)
,
setExitMessage(java.lang.String)
,
setExceptionMessage(java.lang.String)
protected void writeToLog(Log logger, java.lang.String message)
Log
instance.#writeToLog(org.apache.commons.logging.Log, String, Throwable)
protected void writeToLog(Log logger, java.lang.String message, java.lang.Throwable ex)
Throwable
to the
supplied Log
instance. By default messages are written
at TRACE
level. Sub-classes can override this method
to control which level the message is written at.protected java.lang.String replacePlaceholders(java.lang.String message, MethodInvocation methodInvocation, java.lang.Object returnValue, java.lang.Throwable throwable, long invocationTime)
message
- the message template containing the placeholders to be replacedmethodInvocation
- the MethodInvocation
being logged.
Used to derive values for all placeholders except $[exception]
and $[returnValue]
.returnValue
- any value returned by the invocation.
Used to replace the $[returnValue]
placeholder. May be null
.throwable
- any Throwable
raised during the invocation.
The value of Throwable.toString()
is replaced for the
$[exception]
placeholder. May be null
.invocationTime
- the value to write in place of the
$[invocationTime]
placeholderprivate void appendReturnValue(MethodInvocation methodInvocation, java.util.regex.Matcher matcher, java.lang.StringBuffer output, java.lang.Object returnValue)
String
representation of the method return value
to the supplied StringBuffer
. Correctly handles
null
and void
results.methodInvocation
- the MethodInvocation
that returned the valuematcher
- the Matcher
containing the matched placeholderoutput
- the StringBuffer
to write output toreturnValue
- the value returned by the method invocation.private void appendArgumentTypes(MethodInvocation methodInvocation, java.util.regex.Matcher matcher, java.lang.StringBuffer output)
Class
names of the
method argument types to the output. For example, if a method has signature
put(java.lang.String, java.lang.Object)
then the value returned
will be String, Object
.methodInvocation
- the MethodInvocation
being logged.
Arguments will be retrieved from the corresponding Method
.matcher
- the Matcher
containing the state of the outputoutput
- the StringBuffer
containing the outputprivate void checkForInvalidPlaceholders(java.lang.String message) throws java.lang.IllegalArgumentException
String
has any placeholders
that are not specified as constants on this class and throws an
IllegalArgumentException
if so.java.lang.IllegalArgumentException