>source

이 문제가 발생했습니다.
여기 내 code 샘플

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 &amp;
 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("메인에서 안녕하세요.");작동하고 또한 인쇄합니다푸: 바.
하지만 내 자식 스레드스트림고블러얻지 않는다스레드 컨텍스트그리고 인쇄하지 않습니다푸: 바log4j 속성 이벤트로 다음과 같은 경우isThreadContextMapInheritable로 설정됩니다진실.

  • 답변 # 1

    이 문제가 발생했습니다. code에서 설정하지 않아도 응용 프로그램 시작 시 -DisThreadContextMapInheritable=true 설정이 작동합니다.

  • 답변 # 2

    커스텀 사용ThreadPoolExecutor내 문제를 해결했습니다.
    이것을 사용하여 이 솔루션을 찾았습니다. 대답.

  • 이전 graylog2 : 메일을 통해 알림(경고 아님!)을 보내도록 Graylog를 구성하려면 어떻게 해야 합니까?
  • 다음 python : 변수 캔버스에서 작동하지 않는 tkinter 스크롤