public abstract class AbstractTraceInterceptor extends ObjectSE implements MethodInterceptor, SerializableSE
MethodInterceptor
実装。 デフォルトでは、ログメッセージはインターセプトされているクラスではなく、インターセプタークラスのログに書き込まれます。useDynamicLogger
Bean プロパティを true
に設定すると、インターセプトされるターゲットクラスのすべてのログメッセージが Log
に書き込まれます。
サブクラスは invokeUnderTrace
メソッドを実装する必要があります。このメソッドは、特定の呼び出しをトレースする必要があるときにのみ、このクラスによって呼び出されます。サブクラスは、提供された Log
インスタンスに書き込む必要があります。
setUseDynamicLogger(boolean)
, invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, org.apache.commons.logging.Log)
, 直列化された形式 修飾子と型 | フィールドと説明 |
---|---|
protected Log | defaultLogger トレースメッセージの書き込みに使用されるデフォルトの Log インスタンス。 |
コンストラクターと説明 |
---|
AbstractTraceInterceptor() |
修飾子と型 | メソッドと説明 |
---|---|
protected ClassSE<?> | getClassForLogging(ObjectSE target) ロギングの目的で使用するクラスを決定します。 |
protected Log | getLoggerForInvocation(MethodInvocation invocation) 指定された MethodInvocation に使用する適切な Log インスタンスを返します。 |
ObjectSE | invoke(MethodInvocation invocation) 特定の MethodInvocation のロギングを有効にするかどうかを決定します。 |
protected abstract ObjectSE | invokeUnderTrace(MethodInvocation invocation, Log logger) サブクラスは、このメソッドをオーバーライドして、提供された MethodInvocation の周囲のトレースを実行する必要があります。 |
protected boolean | isInterceptorEnabled(MethodInvocation invocation, Log logger) インターセプターを開始するかどうか、つまり invokeUnderTrace メソッドを呼び出す必要があるかどうかを決定します。 |
protected boolean | isLogEnabled(Log logger) 指定された Log インスタンスが有効かどうかを確認します。 |
void | setHideProxyClassNames(boolean hideProxyClassNames) "true" に設定すると、 dynamic loggers が可能な限りプロキシクラス名を非表示にします。 |
void | setLogExceptionStackTrace(boolean logExceptionStackTrace) ロガーに例外を渡すかどうかを設定し、ログにスタックトレースを含めることを提案します。 |
void | setLoggerName(StringSE loggerName) 使用するロガーの名前を設定します。 |
void | setUseDynamicLogger(boolean useDynamicLogger) 動的ロガーと静的ロガーのどちらを使用するかを設定します。 |
protected void | writeToLog(Log logger, StringSE message) 提供されたトレースメッセージを提供された Log インスタンスに書き込みます。 |
protected void | writeToLog(Log logger, StringSE message, ThrowableSE ex) 指定されたトレースメッセージと Throwable SE を指定された Log インスタンスに書き込みます。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setUseDynamicLogger(boolean useDynamicLogger)
特定のメソッド呼び出しのログメッセージを書き込むために使用する Log
インスタンスを決定するために使用されます。Class
が呼び出される動的なインスタンス、またはトレースインターセプターの Class
が静的なインスタンスです。
注意 : このプロパティまたは "loggerName" のいずれかを指定します。両方は指定しないでください。
public void setLoggerName(StringSE loggerName)
これは、クラスのカテゴリ(このインターセプターのクラスまたは呼び出されるクラスのいずれか)にログインするのではなく、特定の名前付きカテゴリにログインするように指定できます。
注意 : このプロパティまたは "useDynamicLogger" のいずれかを指定します。両方は指定しないでください。
public void setHideProxyClassNames(boolean hideProxyClassNames)
dynamic loggers
が可能な限りプロキシクラス名を非表示にします。デフォルトは "false" です。public void setLogExceptionStackTrace(boolean logExceptionStackTrace)
@Nullable public ObjectSE invoke(MethodInvocation invocation) throws ThrowableSE
MethodInvocation
のロギングを有効にするかどうかを決定します。そうでない場合、メソッド呼び出しは通常どおり続行されます。それ以外の場合、メソッド呼び出しは処理のために invokeUnderTrace
メソッドに渡されます。MethodInterceptor
の invoke
invocation
- メソッド呼び出しジョインポイント Joinpoint.proceed()
の呼び出しの結果。インターセプターによってインターセプトされる可能性があります ThrowableSE
- インターセプターまたはターゲットオブジェクトが例外をスローする場合 invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, org.apache.commons.logging.Log)
protected Log getLoggerForInvocation(MethodInvocation invocation)
MethodInvocation
に使用する適切な Log
インスタンスを返します。useDynamicLogger
フラグが設定されている場合、Log
インスタンスは MethodInvocation
のターゲットクラス用です。それ以外の場合は、Log
がデフォルトの静的ロガーになります。invocation
- トレースされる MethodInvocation
Log
インスタンス setUseDynamicLogger(boolean)
protected ClassSE<?> getClassForLogging(ObjectSE target)
target
- イントロスペクトするターゲットオブジェクト setHideProxyClassNames(boolean)
protected boolean isInterceptorEnabled(MethodInvocation invocation, Log logger)
invokeUnderTrace
メソッドを呼び出す必要があるかどうかを決定します。 デフォルトの動作は、指定された Log
インスタンスが有効かどうかを確認することです。サブクラスはこれをオーバーライドして、他の場合にもインターセプターを適用できます。
invocation
- トレースされる MethodInvocation
logger
- チェックする Log
インスタンス invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, org.apache.commons.logging.Log)
, isLogEnabled(org.apache.commons.logging.Log)
protected boolean isLogEnabled(Log logger)
Log
インスタンスが有効かどうかを確認します。「トレース」レベルが有効な場合、デフォルトは true
です。サブクラスはこれをオーバーライドして、「トレース」が発生するレベルを変更できます。
logger
- チェックする Log
インスタンス protected void writeToLog(Log logger, StringSE message)
Log
インスタンスに書き込みます。Enter/Exit メッセージのために invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, org.apache.commons.logging.Log)
によって呼び出されます。
基になるロガーの呼び出しを制御する究極のデリゲートとして writeToLog(Log, String, Throwable)
にデリゲートします。
writeToLog(Log, String, Throwable)
protected void writeToLog(Log logger, StringSE message, @Nullable ThrowableSE ex)
Throwable
SE を指定された Log
インスタンスに書き込みます。Enter/Exit の結果(例外を含む可能性があります)のために invokeUnderTrace(org.aopalliance.intercept.MethodInvocation, org.apache.commons.logging.Log)
によって呼び出されます。setLogExceptionStackTrace(boolean)
が "false" の場合、例外のスタックトレースはログに記録されないことに注意してください。
デフォルトでは、メッセージは TRACE
レベルで書き込まれます。サブクラスはこのメソッドをオーバーライドして、メッセージが書き込まれるレベルを制御できます。通常、それに応じて isLogEnabled(org.apache.commons.logging.Log)
もオーバーライドされます。
@Nullable protected abstract ObjectSE invokeUnderTrace(MethodInvocation invocation, Log logger) throws ThrowableSE
MethodInvocation
をトレースするために、サブクラスはこのメソッドをオーバーライドする必要があります。サブクラスは、MethodInvocation.proceed()
を呼び出して MethodInvocation
が実際に実行されるようにする責任があります。 デフォルトでは、渡された Log
インスタンスでログレベル「トレース」が有効になります。サブクラスは、デフォルトの動作を変更するために isInterceptorEnabled
メソッドを上書きし、実際のメッセージを書き込むために writeToLog
に委譲しない限り、これを再度チェックする必要はありません。
logger
- トレースメッセージを書き込む Log
MethodInvocation.proceed()
の呼び出しの結果 ThrowableSE
- MethodInvocation.proceed()
の呼び出しでエラーが発生した場合 isLogEnabled(org.apache.commons.logging.Log)
, writeToLog(Log, String)
, writeToLog(Log, String, Throwable)