사용자 도구

사이트 도구


java:logback:asyncappender

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:logback:asyncappender [2019/03/22 17:45]
kwon37xi [Reactor Logback]
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에서도 코드 정보를 자동으로 가지게 된다.
 +  * Queue 크기는 ''queueSize'' 옵션으로 변경한다. 기본 ''256''. 적당히 증가시킨다. ''4096''?
 +  * ''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 =====+===== Reactor Logback  : 사용하지 말 것 =====
   * https://github.com/reactor/reactor-addons/tree/master/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만개이다. 설정을 변경해야한다.   * 기본 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]]   * [[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]]   * [[https://dzone.com/articles/ratpacked-use-asynchronous-logging|Ratpacked: Use Asynchronous Logging]]
  
줄 54: 줄 63:
     <!-- Backlog size for logging events. Change size if they are picked up slowly.     <!-- Backlog size for logging events. Change size if they are picked up slowly.
          Default is 1024 * 1024 -->          Default is 1024 * 1024 -->
-    <backlog>50000</backlog>+    <backlog>65536</backlog> <!-- 2의 거듭제곱이어야 함 -->
     <!-- Caller data is relatively slow, so per default disabled -->     <!-- Caller data is relatively slow, so per default disabled -->
     <includeCallerData>false</includeCallerData>     <includeCallerData>false</includeCallerData>
java/logback/asyncappender.1553244306.txt.gz · 마지막으로 수정됨: 2019/03/22 17:45 저자 kwon37xi