プロジェクトでは、インターフェースの操作ログを取得する必要があります。たとえば、インターフェイスのインターフェイス名、オペレータ、インターフェイスの実行時間、インターフェイスが属するサービス、インターフェイスのタイプ(追加、削除、変更、チェック)などを取得します。基本的なアプローチは、インターフェイスメソッドの実行後にこれらの操作レコードをライブラリに保存することです。このコードはインターフェイスで記述されますが、これは設計原則の単一責任原則に違反します。一般的な方法は、AOPを使用して、実行時にログコードを動的に挿入することです。ここでは注釈を付けて行います。
ロギングテーブルを作成する
まず、ログレコードテーブルを作成しましょう。
手術台
次に、エンティティクラスを記述します。
ログメモを書く
最初に注釈を定義しますOperationLog
この注釈では、いくつかのパラメーターが定義されています。
「「opType:ビジネスタイプ
opBusinessName:メンバーシップサービス、注文サービスなどの会社名。
opBusinessId:ビジネスソースID、通常は主キーID
」
ビジネスタイプクラスを定義するOperationType
このビジネスタイプクラスは、インターフェイスのタイプ(追加、削除、変更、およびチェック)を定義します。
次に、アスペクトクラスを記述しますOperationLogAspect
メソッドの上にアノテーションを取得します。
Method method = ((MethodSignature) pjp.getSignature()).getMethod();
//获取目标方法上面的注解
OperationLog opLog = method.getAnnotation(OperationLog.class);
実施対象方法:
try {
// 执行目标方法
result = pjp.proceed();
} catch (Throwable throwable) {
throw new Exception(throwable);
}
ターゲットメソッドの実行前後の実行時間を記録します。
TimeInterval timer = DateUtil.timer();
...
// 执行目标方法
...
long executeTime = timer.intervalRestart();
アノテーションの式を解析すると、ビジネスIDが取得されます。
// 解析表达式,获取结果
String itemId = String.valueOf(expression.getValue(context));
データをオブジェクトにカプセル化します。
Operation operation = Operation.builder()
//.id(snowflake.nextId())
.opType(opLog.opType().name())
.opBusinessName(opLog.opBusinessName())
.opBusinessId(itemId)
.opTime(String.valueOf(executeTime))
//这里可以添加操作人
.build();
ログを記録し、倉庫に保管します。
private void handle(Operation operation) {
// 通过日志打印输出
log.info("opType = " + operation.getOpType() + ",opItem = " + operation.getOpBusinessName() + ",opItemId = " + operation.getOpBusinessId() + ",opTime = " + operation.getOpTime());
// 持久化入库
operationService.save(operation);
}
全体的なコードは次のとおりです。
テストノート
テストアノテーションコードは次のとおりです。
@RequestMapping("/getById")
@ResponseBody
@OperationLog(opType = OperationType.QUERY,opBusinessName = "会员服务",opBusinessId = "#id")
public Member getById(@RequestParam String id) {
return memberService.getById(id);
}
このインターフェイスに、このインターフェイスの操作レコードを記録することを示すgetById
メモを追加しました@OperationLog
。opTypeはクエリタイプ、それが属するビジネスはメンバーシップサービス、ビジネスIDはインターフェイスのパラメータIDです。
インターフェースを実行するコードを開始します。
コンソールはログを印刷しました:
また、データベースには次のレコードもあります。
これでコードは終わりです。もちろん、インターフェイス名のパスやインターフェイスのコールチェーンなどの情報をログレコードテーブルに追加することもできます。
過去におすすめ
QRコードをスキャンして、よりエキサイティングになります。または、WeChatでLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます
回复"java" 获取java电子书;
回复"python"获取python电子书;
回复"算法"获取算法电子书;
回复"大数据"获取大数据电子书;
回复"spring"获取SpringBoot的学习视频。
回复"面试"获取一线大厂面试资料
回复"进阶之路"获取Java进阶之路的思维导图
回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)
回复"总结"获取Java后端面试经验总结PDF版
回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)
回复"并发导图"获取Java并发编程思维导图(xmind终极版)
もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。