구성 및 데모
완전히 개방 방법
시작 매개 변수를 추가 -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
처리량. 이 때, 비동기에서 문제를 해결할 수없는, 빠른 펜더를 사용해야합니다.