logback.xml 파일
logback.xml 파일
logback.xml 구성 파일은 system.log와 debug.log에 기록되는 로그의 로깅 레벨을 선택적으로 설정할 수 있어요. 로깅 레벨은 nodetool setlogginglevels 명령으로도 설정할 수 있습니다.
출처: 문서
본문
옵션
<appender name="<appender_choice>">…</appender>
로그 유형과 설정을 지정해요. 가능한 appender 이름은 SYSTEMLOG, DEBUGLOG, ASYNCDEBUGLOG, STDOUT입니다. SYSTEMLOG는 WARN과 ERROR 메시지가 지정된 파일에 동기적으로 기록되도록 보장해요. DEBUGLOG와 ASYNCDEBUGLOG는 DEBUG 메시지가 각각 동기적 또는 비동기적으로 지정된 파일에 기록되게 합니다. STDOUT는 모든 메시지를 사람이 읽기 좋은 형식으로 콘솔에 출력합니다.
예시: <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file> <filename> </file>
로그의 파일 이름을 지정해요.
예시: <file>${cassandra.logdir}/system.log</file>
<level> <log_level> </level>
로그의 레벨을 지정해요. 필터의 일부입니다. 레벨은 ALL, TRACE, DEBUG, INFO, WARN, ERROR, OFF가 있어요. TRACE가 가장 상세한 로그를 만들고, ERROR가 가장 적어요.
로깅 레벨을 올리면 보통 트래픽이 있는 클러스터에서도 많은 로그가 생성될 수 있어요. 현재 로깅 구성을 확인하려면
nodetool getlogginglevels명령을 사용할 수 있습니다.
기본값: INFO
예시: <level>INFO</level>
<rollingPolicy class="<rolling_policy_choice>" <fileNamePattern><pattern_info></fileNamePattern> … </rollingPolicy>
로그를 아카이브로 롤링(rolling)하는 정책을 지정해요.
예시: <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern> <pattern_info> </fileNamePattern>
로그를 아카이브로 롤링하기 위한 패턴 정보를 지정해요. 롤링 정책의 일부입니다.
예시: <fileNamePattern>${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<maxFileSize> <size> </maxFileSize>
로그 롤링을 트리거할 최대 파일 크기를 지정해요. 롤링 정책의 일부입니다.
예시: <maxFileSize>50MB</maxFileSize>
<maxHistory> <number_of_days> </maxHistory>
로그 롤링을 트리거할 최대 보관 일수를 지정해요. 롤링 정책의 일부입니다.
예시: <maxHistory>7</maxHistory>
<encoder> <pattern>…</pattern> </encoder>
메시지의 형식을 지정해요. 롤링 정책의 일부입니다.
예시: <encoder> <pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern> </encoder>
Cassandra 가상 테이블로의 로깅
logback.xml을 로그가 system_views.system_log 테이블에 나타나도록 구성할 수 있어요. 이는 기본 구성에서 CQLLOG라고 부르는 VirtualTableAppender 클래스로 구현된 appender로 달성됩니다. appender가 주석 처리되면 가상 테이블에 시스템 로그가 기록되지 않아요.
CQLLOG appender는 로그 메시지를 저장하는 기본 구조가 무한정 커질 수 없어서(노드가 메모리 부족이 될 수 있으므로) 특별해요. 이런 이유로 system_log 테이블은 크기가 제한되어 있습니다. 기본적으로 최대 50,000개의 로그 메시지를 보관할 수 있고, 100,000개 이상은 절대 보관할 수 없어요.
가상 테이블이 최대 몇 행을 보관할지 지정하려면 cassandra.virtual.logs.max.rows라는 시스템 속성이 있는데, 정수값을 받아들여요.
예를 들어 메모리를 절약하기 위해 가상 테이블의 모든 로그를 지우고 싶다면 system_views.system_log에 대해 CQL truncate 쿼리를 실행할 수 있어요.
각 메시지가 메모리를 차지하므로, 이 테이블이 중요한 로깅 메시지만 보관하도록 필터를 최소한 WARN 레벨로 설정하는 것을 권장합니다.
가상 테이블로의 appender는 기본적으로 주석 처리되어 있어서 가상 테이블 로깅은 활성화되어 있지 않아요.
기본 logback.xml 내용
<configuration scan="true" scanPeriod="60 seconds">
<!-- No shutdown hook; we run it ourselves in StorageService after shutdown -->
<!-- SYSTEMLOG rolling file appender to system.log (INFO level) -->
<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>${cassandra.logdir}/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${cassandra.logdir}/system.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- each file should be at most 50MB, keep 7 days worth of history, but at most 5GB -->
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- DEBUGLOG rolling file appender to debug.log (all levels) -->
<appender name="DEBUGLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${cassandra.logdir}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${cassandra.logdir}/debug.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<!-- each file should be at most 50MB, keep 7 days worth of history, but at most 5GB -->
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- ASYNCLOG assynchronous appender to debug.log (all levels) -->
<appender name="ASYNCDEBUGLOG" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>1024</queueSize>
<discardingThreshold>0</discardingThreshold>
<includeCallerData>true</includeCallerData>
<appender-ref ref="DEBUGLOG" />
</appender>
<!-- STDOUT console appender to stdout (INFO level) -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%-5level [%thread] %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern>
</encoder>
</appender>
<!-- Uncomment bellow and corresponding appender-ref to activate logback metrics
<appender name="LogbackMetrics" class="com.codahale.metrics.logback.InstrumentedAppender" />
-->
<!-- Uncomment below configuration and corresponding appender-ref to activate
logging into system_views.system_logs virtual table. -->
<!-- <appender name="CQLLOG" class="org.apache.cassandra.utils.logging.VirtualTableAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender> -->
<root level="INFO">
<appender-ref ref="SYSTEMLOG" />
<appender-ref ref="STDOUT" />
<appender-ref ref="ASYNCDEBUGLOG" /> <!-- Comment this line to disable debug.log -->
<!--
<appender-ref ref="LogbackMetrics" />
-->
<!--
<appender-ref ref="CQLLOG"/>
-->
</root>
<logger name="org.apache.cassandra" level="DEBUG"/>
</configuration>
더 알아보기 (Learn more)
- nodetool setlogginglevels — 런타임 로깅 레벨 변경
- cassandra-env.sh / JVM 옵션 설정