Java 阿克卡:可追踪日志
我正在使用Akka和Java。我想知道,在Akka环境中,是否有跟踪日志记录场景的最佳实践/模式 下面是一个非常简单的场景:Java 阿克卡:可追踪日志,java,logging,akka,Java,Logging,Akka,我正在使用Akka和Java。我想知道,在Akka环境中,是否有跟踪日志记录场景的最佳实践/模式 下面是一个非常简单的场景: 源设备参与者向传播者参与者发送状态消息 传播者参与者将状态消息转发给其侦听器(其他设备参与者) 每个侦听器(设备)向传播者参与者发送一条确认消息 基本要求: 每个运行场景在日志中都应该是可区分的 场景启动器标识符(这里是设备id)应显示在所有日志中 对增加需求有什么建议吗?可能是启动消息的类名 我的方法是将可跟踪信息放入logger的MDC中:1)引入用于标记消息的接口,
设备
参与者向传播者
参与者发送状态
消息李>
传播者
参与者将状态
消息转发给其侦听器(其他设备
参与者)李>
设备
)向传播者
参与者发送一条确认
消息可跟踪
,由所有(相关)消息类实现:
public interface Traceable {
String traceId(); // An unique id (UUID) in each scenario (Req#1)
int deviceId(); // Device which initiated the scenario (Req#2)
}
2-AbstractActorWithLogging
作为所有参与者的基类,将可跟踪信息放入记录器的MDC中:
public abstract class AbstractActorWithLogging extends AbstractActor {
protected final DiagnosticLoggingAdapter logger = Logging.getLogger(this);
@Override
public void aroundReceive(PartialFunction<Object, BoxedUnit> receive, Object msg) {
try {
if (msg instanceof Traceable) logger.setMDC(extractMdc(((Traceable) msg)));
if (logger.isDebugEnabled()) logger.debug("Received: {}.", msg);
super.aroundReceive(receive, msg);
if (logger.isDebugEnabled()) logger.debug("Processed: {}.", msg);
} finally {
logger.clearMDC();
}
}
protected Map<String, Object> extractMdc(Traceable traceable) {
Map<String, Object> mdc = new HashMap<>();
mdc.put("traceId", traceable.traceId());
mdc.put("deviceId", traceable.deviceId());
return mdc;
}
}
公共抽象类AbstractActorWithLogging扩展了AbstractActor{
受保护的最终诊断日志适配器记录器=Logging.getLogger(此);
@凌驾
接收周围的公共无效(PartialFunction接收,对象消息){
试一试{
if(msg instanceof Traceable)logger.setMDC(extractMdc(((Traceable)msg));
if(logger.isDebugEnabled())logger.debug(“接收:{}.”,msg);
super.aroundReceive(receive,msg);
if(logger.isDebugEnabled())logger.debug(“已处理:{}”,msg);
}最后{
logger.clearMDC();
}
}
受保护地图提取MDC(可跟踪){
Map mdc=newhashmap();
put(“traceId”,traceable.traceId());
put(“deviceId”,traceable.deviceId());
返回mdc;
}
}
你知道追踪吗?