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
创建最不详细的日志。
提高日志级别可能会在流量适中的集群上生成大量的日志输出。您可以使用 |
默认值: 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>
<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>