类 AbstractTraceInterceptor
- 所有已实现的接口:
Serializable,Advice,Interceptor,MethodInterceptor
MethodInterceptor implementation for tracing.
By default, log messages are written to the log for the interceptor class,
not the class which is being intercepted. Setting the useDynamicLogger
bean property to true causes all log messages to be written to
the Logger for the target class being intercepted.
Subclasses must implement the invokeUnderTrace method, which
is invoked by this class ONLY when a particular invocation SHOULD be traced.
Subclasses should write to the Logger instance provided.
- 从以下版本开始:
- 3.0
- 作者:
- Rob Harrop, Juergen Hoeller, TODAY
- 另请参阅:
-
字段概要
字段修饰符和类型字段说明protected infra.logging.Loggerprivate booleanIndicates whether or not proxy class names should be hidden when using dynamic loggers.private booleanIndicates whether to pass an exception to the logger. -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明protected Class<?>getClassForLogging(Object target) Determine the class to use for logging purposes.protected infra.logging.LoggergetLoggerForInvocation(MethodInvocation invocation) Return the appropriateLoggerinstance to use for the givenMethodInvocation.invoke(MethodInvocation invocation) Determines whether or not logging is enabled for the particularMethodInvocation.protected abstract ObjectinvokeUnderTrace(MethodInvocation invocation, infra.logging.Logger logger) Subclasses must override this method to perform any tracing around the suppliedMethodInvocation.protected booleanisInterceptorEnabled(MethodInvocation invocation, infra.logging.Logger logger) Determine whether the interceptor should kick in, that is, whether theinvokeUnderTracemethod should be called.protected booleanisLogEnabled(infra.logging.Logger logger) Determine whether the givenLoggerinstance is enabled.voidsetHideProxyClassNames(boolean hideProxyClassNames) Set to "true" to havedynamic loggershide proxy class names wherever possible.voidsetLogExceptionStackTrace(boolean logExceptionStackTrace) Set whether to pass an exception to the logger, suggesting inclusion of its stack trace into the log.voidsetLoggerName(String loggerName) Set the name of the logger to use.voidsetUseDynamicLogger(boolean useDynamicLogger) Set whether to use a dynamic logger or a static logger.protected voidwriteToLog(infra.logging.Logger logger, String message) Write the supplied trace message to the suppliedLoggerinstance.protected voidwriteToLog(infra.logging.Logger logger, String message, Throwable ex) Write the supplied trace message andThrowableto the suppliedLoggerinstance.
-
字段详细资料
-
defaultLogger
protected transient infra.logging.Logger defaultLogger -
hideProxyClassNames
private boolean hideProxyClassNamesIndicates whether or not proxy class names should be hidden when using dynamic loggers. -
logExceptionStackTrace
private boolean logExceptionStackTraceIndicates whether to pass an exception to the logger.
-
-
构造器详细资料
-
AbstractTraceInterceptor
public AbstractTraceInterceptor()
-
-
方法详细资料
-
setUseDynamicLogger
public void setUseDynamicLogger(boolean useDynamicLogger) Set whether to use a dynamic logger or a static logger. Default is a static logger for this trace interceptor.Used to determine which
Loggerinstance should be used to write log messages for a particular method invocation: a dynamic one for theClassgetting called, or a static one for theClassof the trace interceptor.NOTE: Specify either this property or "loggerName", not both.
-
setLoggerName
Set the name of the logger to use. The name will be passed to the underlying logger implementation through Commons Logging, getting interpreted as log category according to the logger's configuration.This can be specified to not log into the category of a class (whether this interceptor's class or the class getting called) but rather into a specific named category.
NOTE: Specify either this property or "useDynamicLogger", not both.
- 另请参阅:
-
LoggerFactory.getLogger(String)Logger.getLogger(String)
-
setHideProxyClassNames
public void setHideProxyClassNames(boolean hideProxyClassNames) Set to "true" to havedynamic loggershide proxy class names wherever possible. Default is "false". -
setLogExceptionStackTrace
public void setLogExceptionStackTrace(boolean logExceptionStackTrace) Set whether to pass an exception to the logger, suggesting inclusion of its stack trace into the log. Default is "true"; set this to "false" in order to reduce the log output to just the trace message (which may include the exception class name and exception message, if applicable). -
invoke
Determines whether or not logging is enabled for the particularMethodInvocation. If not, the method invocation proceeds as normal, otherwise the method invocation is passed to theinvokeUnderTracemethod for handling.- 指定者:
invoke在接口中MethodInterceptor- 参数:
invocation- the method invocation joinpoint- 返回:
- the result of the call to
Joinpoint.proceed(), might be intercepted by the interceptor. - 抛出:
Throwable- if the interceptors or the target-object throws an exception.- 另请参阅:
-
getLoggerForInvocation
Return the appropriateLoggerinstance to use for the givenMethodInvocation. If theuseDynamicLoggerflag is set, theLoggerinstance will be for the target class of theMethodInvocation, otherwise theLoggerwill be the default static logger.- 参数:
invocation- theMethodInvocationbeing traced- 返回:
- the
Loggerinstance to use - 另请参阅:
-
getClassForLogging
Determine the class to use for logging purposes.- 参数:
target- the target object to introspect- 返回:
- the target class for the given object
- 另请参阅:
-
isInterceptorEnabled
Determine whether the interceptor should kick in, that is, whether theinvokeUnderTracemethod should be called.Default behavior is to check whether the given
Loggerinstance is enabled. Subclasses can override this to apply the interceptor in other cases as well.- 参数:
invocation- theMethodInvocationbeing tracedlogger- theLoggerinstance to check- 另请参阅:
-
isLogEnabled
protected boolean isLogEnabled(infra.logging.Logger logger) Determine whether the givenLoggerinstance is enabled.Default is
truewhen the "trace" level is enabled. Subclasses can override this to change the level under which 'tracing' occurs.- 参数:
logger- theLoggerinstance to check
-
writeToLog
Write the supplied trace message to the suppliedLoggerinstance.To be called by
invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, infra.logging.Logger)for enter/exit messages.Delegates to
writeToLog(Logger, String, Throwable)as the ultimate delegate that controls the underlying logger invocation. -
writeToLog
Write the supplied trace message andThrowableto the suppliedLoggerinstance.To be called by
invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, infra.logging.Logger)for enter/exit outcomes, potentially including an exception. Note that an exception's stack trace won't get logged whensetLogExceptionStackTrace(boolean)is "false".By default messages are written at
TRACElevel. Subclasses can override this method to control which level the message is written at, typically also overridingisLogEnabled(infra.logging.Logger)accordingly. -
invokeUnderTrace
protected abstract Object invokeUnderTrace(MethodInvocation invocation, infra.logging.Logger logger) throws Throwable Subclasses must override this method to perform any tracing around the suppliedMethodInvocation. Subclasses are responsible for ensuring that theMethodInvocationactually executes by callingMethodInvocation.proceed().By default, the passed-in
Loggerinstance will have log level "trace" enabled. Subclasses do not have to check for this again, unless they overwrite theisInterceptorEnabledmethod to modify the default behavior, and may delegate towriteToLogfor actual messages to be written.- 参数:
logger- theLoggerto write trace messages to- 返回:
- the result of the call to
MethodInvocation.proceed() - 抛出:
Throwable- if the call toMethodInvocation.proceed()encountered any errors- 另请参阅:
-