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>