Spring Web アプリケーションを構築しています。Spring AOP のアスペクトを使用して監査ロギングを行います。
次のようなメソッドを持つビジネス クラスがあり、特定の場合にログを監査したい
- メソッド実行中
メソッドが戻った後
@Aspect public class MyBusinessClass {... public void registerUser() { // do some business logic here... userId = // userService.saveUser(...).getId(); // etc... if(successful) { // then send Email notification audit.log(userId, "success sending email notification"... some other params); else { audit.log(userId, "fail to send email notification"...); } //do some more logic before returning method audit.log(userId,"successfully registered user...." ...); ..// method returns }
別のクラスで定義されたアスペクトを既に取得しています。
ここや他の記事で見た一般的な単純な例はすべて非常に単純に見えたため、問題が発生しています。たとえば、私が見た中で最も複雑なのは、メソッド パラメーターをアスペクトのアドバイスに抽出するところまでしか進まないため、簡単に機能します。
しかし、ここでの問題は、アスペクトのアドバイスにローカル変数を抽出するだけでなく、特定の条件に基づいて監査ログを複数回実行したくないということです。
誤解しないでください。同じ場所にあるファイルにログを記録する Log4j ログが既にありますが、これらの監査ログを DB にも実行する必要があります。
高いレベルでやりたいことを達成するための解決策が何であるかを知りたいだけです。
コードのフォーマットが少しお粗末で申し訳ありません... (ほとんどが疑似コードです)。このコードのフォーマットを StackOverflow で動作させることができません。Github マークダウンの方がはるかに簡単です。