Closed PzTao closed 1 year ago
LogRecordContext是线程级别共享的。能否提供一下你的实际使用方式,确认下是不是跨线程使用了?
如果确实需要跨线程使用,目前的LogRecordContext是不支持的,目前正在使用TransmittableThreadLocal改造。
目前开放了 “日志处理线程池前置处理” 特性。在README中有提到,看下能否满足需求:
在使用线程池处理包装好的日志之前,很多人有一些特殊逻辑需要插入,比如将traceId放入上下文,这里开放接口在logDTO发送给线程池前允许加入用户自定义逻辑。
使用方式如下,添加SpringBean覆写LogRecordThreadWrapper
@Slf4j
@Configuration
public class LogRecordConfig {
@Bean
public LogRecordThreadWrapper logRecordThreadWrapper() {
return new LogRecordThreadWrapper() {
@Override
public Runnable createLog(Consumer<LogDTO> consumer, LogDTO logDTO) {
log.info("Before send createLog task to LogRecordThreadPool. Current thread [{}]", Thread.currentThread().getName());
return LogRecordThreadWrapper.super.createLog(consumer, logDTO);
}
};
}
}
当我在红框方法(第二张图)上使用
@OperationLog(bizId = "#bizId",bizType = "''",msg = "''")
就会导致第三张图片处获取不到bizId,去掉则能正常获取
当我在红框方法(第二张图)上使用
@OperationLog(bizId = "#bizId",bizType = "''",msg = "''")
就会导致第三张图片处获取不到bizId,去掉则能正常获取
putVariable写在哪里了?还是说你想拿的是注解上的bizId
当我在红框方法(第二张图)上使用
@OperationLog(bizId = "#bizId",bizType = "''",msg = "''")
就会导致第三张图片处获取不到bizId,去掉则能正常获取putVariable写在哪里了?还是说你想拿的是注解上的bizId
放在了最外层,id里的bizId也是从LogRecordContext获取的
LogRecordContext.putVariable其他方法获取不到,是否存在LogRecordContext.putGlobalVariable这种操作呢