비동기 로그 구성 문제는 공식 문서와 해명을 log4j2

구성 및 데모

완전히 개방 방법

시작 매개 변수를 추가 -DLog4jContextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
작은 말의 주요 매개 변수를 시작
공식 문서를 http://logging.apache.org/log4j/2.x/manual/async # AllAsync .html 중에서 키 -Dlog4j2.contextSelector = ...입니다
:하지만 개인적으로 실험을 수행하거나 개인적으로 사용하는 경우, 당신은 문제가 나타날 수 있습니다, 단순히 버전과 함께 사용할
-DLog4jContextSelector = org.apache.logging .log4j.core.async.AsyncLoggerContextSelector // == == 전체 버전이 지원하는
버전이 지원 -Dlog4j2.contextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector // == 2.10.0 == 나중에

관련 코드 (2.10.0 이상) :
org.apache.logging.log4j.util.PropertiesPropertySource 및 참조
org.apache.logging.log4j.util.PropertiesUtil.Environment
구성 데이터, 다른 키, 동일한 서비스 의미의 세 세트가 있습니다 환경 :

literal
{java.runtime.name=Java(TM) SE Runtime Environment}


normalized
{log4j2.javaRuntimeName=Java(TM) SE Runtime Environment} key 是log4j2.前缀 加上驼峰形式变量

tokenized
{[java, runtime, name]=Java(TM) SE Runtime Environment}  key是list

두 동기 비동기 혼합 방법

<!-- 使用异步日志时,启用如下配置,异步配置默认不打印location。此种方法无需配置JVM启动参数。 -->
<asyncRoot level="debug">
    <AppenderRef ref="Console" />
</asyncRoot>

일부 노트

  • 기본 위치 정보 등의 행 번호, 클래스, 메소드 등으로, 인쇄되지 않습니다. 우리는 필요에 따라 추가 할 필요가 includeLocation="true"있지만, 공식 성명에 따르면 30 ~ 100 배 속도가 느려집니다.
  • 로그 정보에서 참조하는 객체의 실제 필드 값의 인쇄 로그에 변경 한 경우 비동기 시간, 예 : "안녕하세요 {}"이 user.name에. 그것은 인쇄 로그의 정확도에 영향을 미치지 않습니다. log4j에 스냅 샷 메커니즘을 만들었 기 때문에 대답은 no입니다.

과실 비동기 로그

어떤 단점뿐만 아니라 장점 비동기 로그는 공식이 사용되지 일부 장면 (단점)를 제공합니다 :

  • 예외 처리. 심지어 예외 처리기로 모든 경우를 커버 할 수 없다.
  • 같은 MapMessage 및 StructuredDataMessage 변경 될 수 있습니다 비동기 인쇄 정보를 피할 시간 스냅 샷을 기록하지 않음으로써이 문제와 같은 일부 용도에
  • 이러한 CPU에 관해서는 몇 가지 상황에서 CPU
  • 보다 훨씬 빠른 기록으로 인쇄 appender처리량. 이 때, 비동기에서 문제를 해결할 수없는, 빠른 펜더를 사용해야합니다.

추천

출처www.cnblogs.com/simoncook/p/10964076.html