監査ログ(监查log)
- 表结构:audit_log_record_v4
- 一个机能,写一个共通方法。
工作流
- 新建一个抽象类
- 新建
FunctionType枚举型- 枚举型的 value,使用式样书上的值
AuditLogOperation枚举型中,增加自己机能的操作。- 枚举型的 value,自己根据实际情况取值
- label,使用式样书上的值
- 根据监查 log 式样,编写代码,组织出力内容
- 在业务逻辑执行完成后,调用方法,输出监查 log
配置文件
- logOutputMethod 配置为 DB,则输出到 audit_log_v4 表中
- logOutputMethod 配置为 FILE,则输出到 logFileDestination 定义的文件夹中去
auditLogConfiguration.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config>
<item>
<logOutputMethod>DB</logOutputMethod>
<logFileDestination>${java.io.tmpdir}</logFileDestination>
</item>
</config>
代码
方案一:共通 - 适用于变更项目无需对比或没有的情况
- ObservationCooperationPostServiceImpl - saveToApproveObservation(出力仕様(V4 いいとこみつけ))
- AbstractGroupwareBaseService.java - excuteAuditLog(出力仕様(教職員ネット))
final Supplier> supplier = getJoinedDetail(getFixed(coordination), getStatusLog(StatusType.REQUEST, StatusType.APPROVAL));
excuteAuditLog(supplier, educom.c4v4.service.observation.FunctionType.OBSERVATION_COOPERATION_POST_APPROVAL, AuditLogOperation.APPROVAL);

方案二:共通 - 适用于变更项目需要对比的情况
- ExcelImportLocalServiceImpl - createAuditLog(出力仕様(児童生徒アカウント管理)):AbstractAuditLogStudentAccountService
- RecordSettingServiceImpl - getAuditLogContents

如果监察日志与共通式样有不同的地方
- AuditLogBuilder 中的 customParameters 和 customBuild 方法
注意
- 下面这个写法错误。ofAuditLogBuilder 时,记录了操作开始时间。logRecord 时,记录了结束时间,2 个方法写在一起,那么时间就一样了。
protected void excuteAuditLog(final Supplier<List<? extends CharSequence>> detail, final FunctionType functionType, final AuditLogOperation operation) {
final AuditLogBuilder builder = ofAuditLogBuilder(functionType, operation).studentInformation(false);
auditLoggingService.logRecord(builder.details(detail).result(true).operationEndTime());
}
- 应该使用下面的写法(参照 AbstractAuditLogAlertService)。接口开始执行时,调用 auditLogBegin。接口执行完成后,调用 auditLogEnd。
/**
* 操作開始時に呼び出す
*/
protected AuditLogBuilder auditLogBegin(final FunctionType functionType, final AuditLogOperation operation, final EducationCenter center) {
final AuditLogBuilderExtraParams extraParams = new AuditLogBuilderExtraParams();
extraParams.setSystemManage(true);
extraParams.setSchoolId(center.getSchoolId());
return ofAuditLogBuilder(functionType, operation).studentInformation(false).customParameters(extraParams);
}
/**
* 処理終了時に呼び出す
*/
protected void auditLogEnd(final AuditLogBuilder builder, final Supplier<List<? extends CharSequence>> detail) {
auditLoggingService.logRecord(builder.details(detail).result(true).operationEndTime());
}