2017-05-19 5 views
0

나는 현재 내가 추가하지 않은는 어떤 차이

Log4jContextSelector

의 속성을 설정하지 않고 2 내가 내 log4j2을 구성한 로깅 프레임 워크의 log4j를 탐험하고을 Log4jContextSelector의 속성을 설정 하는가 내 빌드 경로에 방해가 병.

나중에 설명서를 자세히 읽은 후, 나는이 성명서를 읽었습니다.

시스템 속성을 설정하는 것을 잊지 마세요 -DLog4jContextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 나는이 속성을 설정하면 이

비동기 모든 로거를 확인하고 추가 disruptor jar, 나는 현저한 성능 향상을 보지 못했습니다.

기본 방법의 첫 번째 줄에 아래 줄을 추가하여 만들었습니다.

System.setProperty("Log4jContextSelector", 
       "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"); 

내가이 시험 중에 생성 된 로그의 총량은 MB

이 47.3 나 기상이 부동산에 어떤 차이를 만드는가 설정을 생각하게입니까? 또는 Log4j2를 사용할 때 기본적으로 비동기입니다. 1의 log4j-API-2.8.2.jar 2. log4j에 코어-2.8.2.jar 3. 장애 물질 3.2.0.jar

UPDATE :

나는 다음과 같은 항아리를 사용하고 : 은 log4j2-perf에서 benchmark.jar를 실행했습니다. 메트릭 인쇄가 시작됩니다. 동기 로거와 비교하기 위해 측정 항목을 어떻게 사용할 수 있는지 이해할 수 없습니다.

답변

1

Log4j2는 기본적으로 동기식입니다. 언급 한 시스템 특성은 모든 로거가 비동기가된다는 영향을줍니다.

당신이하고있는 일이 맞는 것처럼 보입니다. 성능에 어떤 영향을 미치는지는 알 수 없지만 어떻게 측정했는지는 분명하지 않습니다.

응용 프로그램이 동시에 많이 로깅하는 스레드가 많거나 대량의 메시지를 대량으로 기록해야하는 경우 Disruptor로 인한 비동기 로깅의 이점이 더 잘 보입니다. 비동기 로깅은 응용 프로그램이 로그 메시지 형식화 및 입출력이 완료 될 때까지 기다리지 않아도 다른 작업을 수행 할 수 있음을 의미합니다.

성능 측정은 쉽지 않지만 응용 프로그램의 확장이 필요할 경우 시간을 투자 할 가치가 있습니다. Log4j2 performance 페이지에는 성능 테스트 코드뿐만 아니라 방법론 및 기법에 대한 링크가 있습니다.

0

Log4jmain method으로 전화하기 전에 초기화되었습니다. 따라서 귀하의 속성 Log4jContextSelector을 시스템에서 선택할 수 없으며 기본적으로 동 기적으로 작동합니다.

동일하게 확인하려면 disruptor 종속성을 제거하십시오. 프로젝트가 계속 올라간다면 비동기가 발생하지 않습니다. 다음 올라갈하지 않습니다 교란 프로젝트를 제거한 후 DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -

당신은 를 통해 속성을 추가합니다.

바람둥이를 사용하는 경우 catalina.properties에 시스템 속성을 추가하십시오. immediateFlush="false"을 반드시 사용하십시오.