Configuring logging
Logging functionality uses Simple Logging Facade for Java (SLF4J) with a logback backend.
logback.xml
- The logback.xml file is located in the installation_location/conf directory.
Logging functionality uses Simple Logging Facade for Java (SLF4J) with a logback backend. Logs are written to the system.log and debug.log in the logging directory. You can configure logging programmatically or manually. Manual ways to configure logging are:
- Run the
nodetool nodetool setlogginglevel
command. - Configure the logback-test.xml or logback.xml file installed with DataStax Distribution of Apache Cassandra™ (DDAC).
- Use the JConsole tool to configure logging through JMX.
Logback looks for logback-test.xml first, and then for logback.xml file.
<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" /> --> <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" /> --> </root> <logger name="org.apache.cassandra" level="DEBUG"/> <logger name="com.thinkaurelius.thrift" level="ERROR"/> </configuration>
appendername="appender"
, and are
described as follows. - SYSTEMLOG
- Directs logs and ensures that WARN and ERROR messages are written synchronously to the /var/log/cassandra/system.log file.
- DEBUGLOG | ASYNCDEBUGLOG
- Generates the /var/log/cassandra/debug.log file, which contains an asynchronous log of events written to the system.log file, plus production logging information useful for debugging issues.
- STDOUT
- Directs logs to the console in a human-readable format.
- Rolling policy
- The policy for rolling logs over to an archive
- Location and name of the log file
- Location and name of the archive
- Minimum and maximum file size to trigger rolling
- Format of the message
- The log level
Log levels
The valid values for setting the log level include ALL for logging information at all levels, TRACE through ERROR, and OFF for no logging. TRACE creates the most verbose log, and ERROR, the least.
- ALL
- TRACE
- DEBUG
- INFO (Default)
- WARN
- ERROR
- OFF
bin\nodetool getlogginglevels Logger Name Log Level ROOT INFO com.thinkaurelius.thrift ERROR
nodetool setlogginglevel
to check you have the right class before you
set it in the logback.xml file in installation_location/conf. Modify to
include the following line or similar at the end of the
file:<logger name="org.apache.cassandra.gms.FailureDetector" level="DEBUG"/>Restart the node to invoke the change.
Migrating to logback from log4j
If you upgrade from an earlier version that used log4j, you can convert log4j.properties files to logback.xml using the logback PropertiesTranslator web-application.
Using log file rotation
The default policy rolls the system.log file after the size exceeds 20MB. Archives are compressed in zip format. Logback names the log files system.log.1.zip, system.log.2.zip, and so on. For more information, see logback documentation.
Enabling extended compaction logging
To configure collection of in-depth information about compaction activity on a node, and write it to a dedicated log file, see Enabling extended compaction logging.