Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

logback.xml 檔案

logback.xml 設定檔可以選擇設定寫入 system.logdebug.log 的記錄的記錄層級。也可以使用 nodetool setlogginglevels 設定記錄層級。

選項

appender name="<appender_choice>"…​</appender>

指定記錄類型和設定。可能的附加程式名稱為:SYSTEMLOGDEBUGLOGASYNCDEBUGLOGSTDOUTSYSTEMLOG 確保 WARN 和 ERROR 訊息會同步寫入指定的檔案。DEBUGLOGASYNCDEBUGLOG 分別確保 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>

指定記錄層級。過濾器的一部分。層級為:ALLTRACEDEBUGINFOWARNERROROFFTRACE 會建立最詳細的記錄,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 虛擬表格

可以設定 logback.xml,讓記錄出現在 system_views.system_log 表格中。這是透過在 VirtualTableAppender 類別中實作的附加程式來達成,在預設組態中稱為 CQLLOG。當附加程式被註解掉時,系統記錄不會寫入虛擬表格。

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>