Java Log4j线程上下文多线程赢了';不继承

Java Log4j线程上下文多线程赢了';不继承,java,log4j,Java,Log4j,我遇到了这个问题 这里是我的代码示例 公共类StackOverflow实现RequestHandler{ 私有静态最终记录器Logger=LogManager.getLogger(StackOverflow.class); 公共抽象类StreamGobbler扩展线程{ //正在使用此.print(“消息”)工作的拦截器 公开摘要作废打印(字符串行); } 私有类ErrStreamGobbler扩展StreamGobbler{ ErrStreamGobbler(InputStream in){s

我遇到了这个问题
这里是我的代码示例

公共类StackOverflow实现RequestHandler{
私有静态最终记录器Logger=LogManager.getLogger(StackOverflow.class);
公共抽象类StreamGobbler扩展线程{
//正在使用此.print(“消息”)工作的拦截器
公开摘要作废打印(字符串行);
}
私有类ErrStreamGobbler扩展StreamGobbler{
ErrStreamGobbler(InputStream in){super(in);}
@凌驾
公共无效打印(字符串行){LOGGER.error(行);}
}
私有类OutStreamGobbler扩展了StreamGobbler{
OutStreamGobbler(InputStream in){super(in);}
@凌驾
公共无效打印(字符串行){LOGGER.info(行);}
}
//主要方法
@凌驾
公共ApiGatewayResponse HandlerRequest(映射参数、上下文){
//线程上下文传播
setProperty(“isThreadContextMapInheritable”、“true”);
ThreadContext.put(“foo”、“bar”);
LOGGER.info(“来自main的你好”);
//我的进程将返回System.in&System.out上的值
ProcessBuilder pb=新的ProcessBuilder(“sh”,String.format(“batchs/JOB\u FOO/run.sh”);
进程p=pb.start();
//拦截那些日志
新的ErrStreamGobbler(p.getErrorStream()).start();
新的OutStreamGobbler(p.getInputStream()).start();
p、 waitFor();
}
}
LOGGER.info中的
ThreadContext
(“Hello from main”)可以工作,并且可以打印
foo:bar


但是,如果使用自定义
线程池执行器将
isThreadContextMapInheritable
设置为
true
,则我的子线程
StreamGoBler
不会获取
线程上下文
,也不会将
foo:bar
打印为log4j属性事件。
使用此找到此解决方案