<?xml version="1.0" encoding="UTF-8"?>
<!--
    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 status="WARN" monitorInterval="30">
    <Properties>
        <property name="basePath">${sys:tubemq.log.path}</property>
        <property name="filePrefix">${sys:tubemq.log.prefix}</property>
        <property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.}:%L %m%n</property>
        <property name="every_file_size">1G</property>
        <property name="output_log_level">DEBUG</property>
        <property name="rolling_max">50</property>
        <property name="info_fileName">${basePath}/${filePrefix}_info.log</property>
        <property name="info_filePattern">${basePath}/${filePrefix}_info-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="info_max">10</property>
        <property name="debug_fileName">${basePath}/${filePrefix}_debug.log</property>
        <property name="debug_filePattern">${basePath}/${filePrefix}_debug-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="debug_max">10</property>
        <property name="warn_fileName">${basePath}/${filePrefix}_warn.log</property>
        <property name="warn_filePattern">${basePath}/${filePrefix}_warn-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="warn_max">10</property>
        <property name="error_fileName">${basePath}/${filePrefix}_error.log</property>
        <property name="error_filePattern">${basePath}/${filePrefix}_error-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="error_max">10</property>
        <property name="put_transfer_fileName">${basePath}/${filePrefix}_put_transfer.log</property>
        <property name="put_transfer_filePattern">${basePath}/${filePrefix}_put_transfer-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="put_transfer_max">10</property>
        <property name="get_transfer_fileName">${basePath}/${filePrefix}_get_transfer.log</property>
        <property name="get_transfer_filePattern">${basePath}/${filePrefix}_get_transfer-%d{yyyy-MM-dd}-%i.log.gz</property>
        <property name="get_transfer_max">10</property>
        <property name="console_print_level">DEBUG</property>
    </Properties>

    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="${console_print_level}" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log_pattern}"/>
        </Console>

        <RollingFile name="DebugFile" fileName="${debug_fileName}" filePattern="${debug_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${debug_max}" />
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="InfoFile" fileName="${info_fileName}" filePattern="${info_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${info_max}" />
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="WarnFile" fileName="${warn_fileName}" filePattern="${warn_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${warn_max}" />
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="ErrorFile" fileName="${error_fileName}" filePattern="${error_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${error_max}" />
            <Filters>
                <ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="PutCounterGroup" fileName="${put_transfer_fileName}" filePattern="${put_transfer_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${put_transfer_max}" />
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="GetCounterGroup" fileName="${get_transfer_fileName}" filePattern="${get_transfer_filePattern}">
            <PatternLayout pattern="${log_pattern}"/>
            <SizeBasedTriggeringPolicy size="${every_file_size}"/>
            <DefaultRolloverStrategy max="${get_transfer_max}" />
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>
    </appenders>

    <loggers>
        <root level="${output_log_level}">
            <appender-ref ref="Console"/>
            <appender-ref ref="DebugFile"/>
            <appender-ref ref="InfoFile"/>
            <appender-ref ref="WarnFile"/>
            <appender-ref ref="ErrorFile"/>
        </root>
    </loggers>
</configuration>