logback.xml ファイル
設定ファイル`logback.xml`では、`system.log`および`debug.log`に書き込まれるログのログレベルをオプションで設定できます。ログレベルは、`nodetool setlogginglevels`を使用して設定することもできます。
オプション
`<appender name="<appender_choice>"…</appender>`
ログの種類と設定を指定します。指定可能なアペンダー名は、`SYSTEMLOG`、`DEBUGLOG`、`ASYNCDEBUGLOG`、`STDOUT`です。 `SYSTEMLOG`は、WARNおよびERRORメッセージが指定されたファイルに同期して書き込まれることを保証します。 `DEBUGLOG`と`ASYNCDEBUGLOG`は、DEBUGメッセージが指定されたファイルにそれぞれ同期または非同期に書き込まれることを保証します。 `STDOUT`は、すべてのメッセージを人間が読める形式でコンソールに書き込みます。
**例:** <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
`<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>`
ログをアーカイブにロールオーバーするためのポリシーを指定します。
**例:** <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>`
メッセージの形式を指定します。ローリングポリシーの一部です。
**例:** <maxHistory>7</maxHistory> **例:** <encoder> <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern> </encoder>
Cassandra 仮想テーブルへのロギング
ログが`system_views.system_log`テーブルに表示されるようにlogback.xmlを設定することができます。これは、デフォルト設定で`CQLLOG`と呼ばれるクラス`VirtualTableAppender`に実装されているアペンダーによって実現されます。アペンダーがコメントアウトされている場合、システムログは仮想テーブルに書き込まれません。
CQLLOGアペンダーは特殊です。ログメッセージを保存する基盤となる構造は、ノードのメモリが不足するため、無制限に増やすことができません。このため、`system_log`テーブルのサイズは制限されています。デフォルトでは、最大50,000個のログメッセージを保持でき、100,000個を超えるログメッセージを保持することはできません。
仮想テーブルに保持する最大行数を指定するために、`cassandra.virtual.logs.max.rows`というシステムプロパティがあり、整数値を取ります。
たとえば、メモリを節約するために仮想テーブル内のすべてのログを消去したい場合は、`system_views.system_log`に対してCQL`truncate`クエリを実行できます。
各メッセージがメモリを占有するため、このテーブルには重要なログメッセージのみが保持されるように、フィルタを少なくとも`WARN`レベルに設定することをお勧めします。
仮想テーブルへのアペンダーはデフォルトでコメントアウトされているため、仮想テーブルへのロギングはアクティブではありません。
デフォルトの`logback.xml`の内容
<configuration scan="true" scanPeriod="60 seconds">
<jmxConfigurator />
<!-- 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{ISO8601} %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{ISO8601} %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{ISO8601} %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>