首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4j ThreadContext MultiThread不会继承

Log4j ThreadContext MultiThread不会继承
EN

Stack Overflow用户
提问于 2020-09-29 21:51:40
回答 2查看 251关注 0票数 0

我遇到了这个post的问题

下面是我的代码示例

代码语言:javascript
复制
public class StackOverflow implements RequestHandler<Map<String, String>, ApiGatewayResponse> {
    private static final Logger LOGGER = LogManager.getLogger(StackOverflow.class);

    public abstract class StreamGobbler extends Thread {
        // Working Interceptor using this.print("message")
        public abstract void print(String line);
    }

    private class ErrStreamGobbler extends StreamGobbler {
        ErrStreamGobbler(InputStream in) { super(in); }

        @Override
        public void print(String line) { LOGGER.error(line); }
    }

    private class OutStreamGobbler extends StreamGobbler {
        OutStreamGobbler(InputStream in) { super(in); }

        @Override
        public void print(String line) { LOGGER.info(line); }
    }


    // MAIN METHOD
    @Override
    public ApiGatewayResponse handleRequest(Map<String, String> params, Context context) {
        // ThreadContext propagation
        System.setProperty("isThreadContextMapInheritable", "true");
        ThreadContext.put("foo", "bar");

        LOGGER.info("Hello from main");

        // My process will return value on System.in & System.out
        ProcessBuilder pb = new ProcessBuilder("sh", String.format("batchs/JOB_FOO/run.sh"));
        Process p = pb.start();
        // Intercept those logs
        new ErrStreamGobbler(p.getErrorStream()).start();
        new OutStreamGobbler(p.getInputStream()).start();
        p.waitFor();
    }
}

来自LOGGER.info("Hello from main");ThreadContext可以正常工作,并且还可以打印foo: bar

但是我的子线程StreamGobbler没有得到ThreadContext,并且如果isThreadContextMapInheritable被设置为true,也不会将foo: bar作为log4j属性事件输出。

EN

回答 2

Stack Overflow用户

发布于 2022-01-15 00:33:45

刚刚遇到了这个问题。发现在应用程序启动时设置-DisThreadContextMapInheritable=true有效,即使在代码中设置它不起作用。

票数 2
EN

Stack Overflow用户

发布于 2020-09-30 18:04:19

使用自定义的ThreadPoolExecutor确实解决了我的问题。

使用此answer找到此解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64121046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档