<?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 scan="true" scanPeriod="60 seconds">
    <appender name="A1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${jstorm.log.dir}/${topology.name:-.}/${logfile.name}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${jstorm.log.dir}/${topology.name:-.}/${logfile.name}.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1GB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <pattern>[%p %d{yyyy-MM-dd HH:mm:ss} %c{1}:%L %t] %m%n</pattern>
        </encoder>
    </appender>

    <appender name="METRICS" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${jstorm.log.dir}/${topology.name:-.}/${logfile.name}.metrics</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${jstorm.log.dir}/${topology.name:-.}/${logfile.name}.metrics.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <!--<pattern>[%p %d{yyyy-MM-dd HH:mm:ss} %c{1}:%L %t] %m%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss} %t] %m%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="A1"/>
    </root>
    <logger name="org.apache.zookeeper" level="ERROR" />
    <logger name="org.apache.curator" level="ERROR" />
    <logger name="com.netflix.curator" level="ERROR" />

    <logger name="com.alibaba.jstorm" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="A1"/>
    </logger>

    <logger name="com.alibaba.jstorm.common.metric" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="METRICS"/>
    </logger>

    <logger name="com.alibaba.jstorm.task.heartbeat" additivity="false">
        <level value="WARN"/>
        <appender-ref ref="METRICS"/>
    </logger>

    <logger name="com.alibaba.jstorm.daemon.worker.hearbeat" additivity="false">
        <level value="WARN"/>
        <appender-ref ref="METRICS"/>
    </logger>

    <logger name="com.alibaba.jstorm.daemon.nimbus.metric" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="METRICS"/>
    </logger>

    <logger name="com.alibaba.jstorm.metric" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="METRICS"/>
    </logger>
</configuration>
 