<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<configuration debug="false" scan="true" scanPeriod="60 seconds">
    <define name="cluster_id" class="org.apache.cassandra.distributed.impl.ClusterIDDefiner" />
    <define name="instance_id" class="org.apache.cassandra.distributed.impl.InstanceIDDefiner" />

    <!-- Shutdown hook ensures that async appender flushes -->
    <shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>

    <appender name="INSTANCEFILE" class="ch.qos.logback.core.FileAppender">
        <file>./build/test/logs/${cassandra.testtag}/${suitename}/${cluster_id}/${instance_id}/system.log</file>
        <encoder>
            <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %msg%n</pattern>
        </encoder>
        <immediateFlush>true</immediateFlush>
    </appender>

    <appender name="INSTANCESTDERR" target="System.err" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>

    <appender name="INSTANCESTDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level [%thread] ${instance_id} %date{"yyyy-MM-dd'T'HH:mm:ss,SSS", UTC} %F:%L - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <appender name="SLOW_QUERIES_APPENDER" class="org.apache.cassandra.utils.logging.SlowQueriesAppender"/>

    <logger name="slow_operations" additivity="false" level="DEBUG">
        <appender-ref ref="SLOW_QUERIES_APPENDER"/>
    </logger>

    <root level="DEBUG">
        <appender-ref ref="INSTANCEFILE" /> <!-- use blocking to avoid race conditions with appending and searching -->
        <appender-ref ref="INSTANCESTDERR" />
        <appender-ref ref="INSTANCESTDOUT" />
    </root>
</configuration>
