내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
•
tpm
•
collaboration
•
user_data
•
install_using_usb
•
tmuxinator
•
ide
•
codi
•
static_analysis
java:logback:asyncappender
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Logback AsyncAppender ====== * Logback의 비동기 어펜더 및 기타 고속 어펜더들 * 비동기 로깅의 경우 Method name, Line Number 등이 출력되지 않는다. ===== AsyncAppender ===== 비동기 Appender는 확실히 빠르지만 부하가 심한 상황에서 WARN 이하 레벨의 로그는 기본적으로 20% 유실 될 수 있고, 비동기 큐에 로그가 쌓인 상태에서 프로세스가 종료되면 해당 로그는 기록되지 않고 종료된다. groovy 방식 설정은 1.1 이후 버전부터 AsyncAppender 사용가능. appenderRef가 존재하지 않았기 때문. <code groovy> import ch.qos.logback.classic.AsyncAppender import ch.qos.logback.classic.PatternLayout import ch.qos.logback.core.ConsoleAppender import ch.qos.logback.core.encoder.LayoutWrappingEncoder appender("STDOUT", ConsoleAppender) { encoder(LayoutWrappingEncoder) { layout(PatternLayout) { pattern = "${p} %m%n" // ${p} 잘못된 패턴인듯 } } } appender("STDOUT-ASYNC", AsyncAppender) { appenderRef('STDOUT') } root(DEBUG, ["STDOUT-ASYNC"]) </code> * 기본적으로 AsyncAppender는 코드 정보(클래스,메소드,줄번호)를 남기지 않는데, ''includeCallerData=true''를 통해서 가능하다. 물론 성능저하가 발생할 것이다. * 단, 하나의 로그를 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 : 사용하지 말 것 ===== * 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]] * [[https://mvnrepository.com/artifact/io.projectreactor.addons/reactor-logback|Maven Repository for reactor-logback]] * 성능 테스트 결과 유실이 없게 설정할 경우 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.txt
· 마지막으로 수정됨: 2023/12/01 13:19 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로