사용자 도구

사이트 도구


java:logback:asyncappender

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:logback:asyncappender [2015/07/02 18:10]
kwon37xi [AsyncAppender]
java:logback:asyncappender [2023/12/01 13:19] (현재)
kwon37xi [AsyncAppender]
줄 2: 줄 2:
   * Logback의 비동기 어펜더 및 기타 고속 어펜더들   * Logback의 비동기 어펜더 및 기타 고속 어펜더들
   * 비동기 로깅의 경우 Method name, Line Number 등이 출력되지 않는다.   * 비동기 로깅의 경우 Method name, Line Number 등이 출력되지 않는다.
 +
 ===== AsyncAppender ===== ===== AsyncAppender =====
 비동기 Appender는 확실히 빠르지만 부하가 심한 상황에서 WARN 이하 레벨의 로그는 기본적으로 20% 유실 될 수 있고, 비동기 큐에 로그가 쌓인 상태에서 프로세스가 종료되면 해당 로그는 기록되지 않고 종료된다. 비동기 Appender는 확실히 빠르지만 부하가 심한 상황에서 WARN 이하 레벨의 로그는 기본적으로 20% 유실 될 수 있고, 비동기 큐에 로그가 쌓인 상태에서 프로세스가 종료되면 해당 로그는 기록되지 않고 종료된다.
줄 27: 줄 28:
   * 기본적으로 AsyncAppender는 코드 정보(클래스,메소드,줄번호)를 남기지 않는데, ''includeCallerData=true''를 통해서 가능하다. 물론 성능저하가 발생할 것이다.   * 기본적으로 AsyncAppender는 코드 정보(클래스,메소드,줄번호)를 남기지 않는데, ''includeCallerData=true''를 통해서 가능하다. 물론 성능저하가 발생할 것이다.
   * 단, 하나의 로그를 Async가 아닌 Appender와 함께 호출하며 해당 Appender에서 이미 코드 정보를 읽어들였다면 AsyncAppender에서도 코드 정보를 자동으로 가지게 된다.   * 단, 하나의 로그를 Async가 아닌 Appender와 함께 호출하며 해당 Appender에서 이미 코드 정보를 읽어들였다면 AsyncAppender에서도 코드 정보를 자동으로 가지게 된다.
-===== Reactor Logback ===== +  * Queue 크기는 ''queueSize'' 옵션으로 변경한다. 기본 ''256''. 적당히 증가시킨다. ''4096''? 
-  * https://github.com/reactor/reactor/tree/master/reactor-logback+  * ''neverBlock=false'' 큐가 20%정도만 남으면  1차로 ERROR 보다 낮은 레벨의 로그를 버리고, ERROR 이상 레벨의 로그를 찍는데 그것도 꽉차면 blocking 상태가 된다. ''neverBlock=true'' 이면 그마저도 blocking 하지 않고 버려버린다. 
 + 
 +===== Logstash - AsyncDisruptorAppender ===== 
 +  * [[https://github.com/logstash/logstash-logback-encoder/blob/master/src/main/java/net/logstash/logback/appender/AsyncDisruptorAppender.java|AsyncDisruptorAppender]] 
 +  * [[https://github.com/logstash/logstash-logback-encoder|logstash-logback-encoder]] 프로젝트에 포함된 고성능 appender 
 + 
 + 
 +===== Reactor Logback  : 사용하지 말 것 ===== 
 +  * https://github.com/reactor/reactor-addons/tree/master/reactor-logback 
 +  * **Deprecated 예정이므로 사용하지 말 것. Momory Leak도 있어보임** [[https://github.com/reactor/reactor-addons/issues/168| Memory leak with reactor-logback by using reactor.logback.AsyncAppender to log into separate file #168]] 
 +  * 기본 backlog 갯수가 100만개이다. 설정을 변경해야한다.
   * groovy로 설정하려면 logback 1.1.3 버전 이상 필요. [[http://jira.qos.ch/browse/LOGBACK-1008|LOGBACK-1008]]   * groovy로 설정하려면 logback 1.1.3 버전 이상 필요. [[http://jira.qos.ch/browse/LOGBACK-1008|LOGBACK-1008]]
 +  * [[https://mvnrepository.com/artifact/io.projectreactor.addons/reactor-logback|Maven Repository for reactor-logback]]
   * 성능 테스트 결과 유실이 없게 설정할 경우 Reactor Logback이 Logback 기본 AsyncAppender보다 훨씬 빠르다.   * 성능 테스트 결과 유실이 없게 설정할 경우 Reactor Logback이 Logback 기본 AsyncAppender보다 훨씬 빠르다.
 +  * ''includeCallerData=false''에 따라 메소드 이름, 줄 번호 등이 출력되지 않는다. 대신 성능은 향상된다.
 +  * [[https://github.com/reactor/reactor-addons/issues/168|Reactor Logback Memory Leak]] - 3.3 버전에서 해결 되는 듯.
 +  * [[https://dzone.com/articles/ratpacked-use-asynchronous-logging|Ratpacked: Use Asynchronous Logging]]
 +
 +<code xml>
 +<configuration>
 +
 +  <!-- The underlying appender will be the standard console one. -->
 +  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
 +    <encoder>
 +      <pattern>
 +        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
 +      </pattern>
 +    </encoder>
 +  </appender>
 +
 +  <!-- Wrap calls to the console logger with async dispatching to Disruptor. -->
 +  <appender name="async" class="reactor.logback.AsyncAppender">
 +    <!-- Backlog size for logging events. Change size if they are picked up slowly.
 +         Default is 1024 * 1024 -->
 +    <backlog>65536</backlog> <!-- 2의 거듭제곱이어야 함 -->
 +    <!-- Caller data is relatively slow, so per default disabled -->
 +    <includeCallerData>false</includeCallerData>
 +    <appender-ref ref="stdout"/>
 +  </appender>
 +
 +  <!-- Direct all logging through the AsyncAppender. -->
 +  <root level="info">
 +    <appender-ref ref="async"/>
 +  </root>
 +
 +</configuration>
 +</code>
java/logback/asyncappender.1435828259.txt.gz · 마지막으로 수정됨: 2015/07/02 18:10 저자 kwon37xi