日志记录提交
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package com.baiyue.common.audit;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.transaction.support.TransactionOperations;
|
||||
|
||||
/** 将审计事件先持久化到业务库 Outbox,核心业务不等待 MQ。 */
|
||||
public class OutboxAuditSink implements AuditSink {
|
||||
private static final Logger log = LoggerFactory.getLogger(OutboxAuditSink.class);
|
||||
private final AuditOutboxRepository repository;
|
||||
private final ObjectMapper json;
|
||||
private final TransactionOperations transactions;
|
||||
|
||||
public OutboxAuditSink(AuditOutboxRepository repository, ObjectMapper json,
|
||||
TransactionOperations transactions) {
|
||||
this.repository = repository;
|
||||
this.json = json;
|
||||
this.transactions = transactions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publish(AuditEvent event) {
|
||||
try {
|
||||
String payload = json.writeValueAsString(event);
|
||||
transactions.executeWithoutResult(status -> repository.append(event, payload));
|
||||
} catch (JsonProcessingException | RuntimeException exception) {
|
||||
log.error("审计事件写入本地 Outbox 失败 eventId={} eventType={}",
|
||||
event.eventId(), event.eventType(), exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user