私のメソッドの元の行番号をAspectJ(Spring)フレームワークで記録するにはどうしたらいいですか?私はプログラミングを初めてお使いになっているので、可能かどうかを知りたいだけです。 aopは新しいクラスと新しいメソッドを生成するmyメソッドの呼び出しプロセスを委譲するので、ログに記録される行番号は常に元のものではありません。AspectJとlog4jを使ってログ行番号を元に戻す方法は?
は、以下の私のコードの一部を以下のとおりです。
スキーマベースのAOPの設定:ここでは
<bean id="logInterceptor" class="com.fuhu.appsub.aop.LogInterceptor"></bean>
<aop:config>
<aop:aspect id="logDBAspect" ref="logInterceptor">
<aop:pointcut id="logDBPointcut" expression="execution(* com.fuhu.appsub.service..*(..)) " />
<aop:after-throwing pointcut-ref="logDBPointcut" throwing="ex" method="logDBException"/>
</aop:aspect>
</aop:config>
だ私の委任方法:
public void logDBException(JoinPoint joinPoint, Exception ex) {
if(loggerDB.isErrorEnabled()){
loggerDB.error(ex.getMessage());
}
}
:
@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
public List<Item> findByName (String name) throws Exception{
try
{
List<Item> itemList = itemRepository.findByName(name);
int i=0,j=1;
int k = j/i;
return itemList;
}
catch(Exception ex)
{
throw new Exception(ex.getMessage() + "in findByName with name=" + name + " file:" + Thread.currentThread().getStackTrace()[2].getFileName() + " line:" + Thread.currentThread().getStackTrace()[2].getLineNumber());
}
}
はここに私の委譲メソッドです
明らかに、私はあなたの質問が完了する前にそれを読んでいます。 Spring AOPを使用しているので、正確な行番号を取得する必要があります。しかし、私はThread.getStackTraceを一度も使用していないので、おそらくあなたはそれからいくつかの特殊な動作を得ているでしょう。 例外をキャッチすることは、例外を投げているように、非常に貧しい習慣です。スローされた例外には独自のstacktraceがあり、logDBExceptionメソッドは例外メッセージに組み込むのではなく必要な情報を簡単に抽出できることにも注意してください。 –
ちょっとライアン、私はあなたが言ったことに取り組んだ、本当にありがとう。 – post2626