<?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>
    <Properties>
        <property name="FILE_PATH" value="./logs/gateway"/>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d [%p][%t][%c:%L] %m%n"/>
        </Console>

        <RollingFile name="AccessLog" fileName="${FILE_PATH}/access.log"
          filePattern="${FILE_PATH}/access-%d{yyyy-MM-dd}_%i.log.gz">
            <PatternLayout pattern="%d [%t] %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <RollingFile name="MetricsLog" fileName="${FILE_PATH}/metrics.log"
          filePattern="${FILE_PATH}/metrics-%d{yyyy-MM-dd}_%i.log.gz">
            <PatternLayout pattern="%d [%t] %m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <AsyncLogger name="access_logger" level="INFO" additivity="false">
            <AppenderRef ref="AccessLog"/>
        </AsyncLogger>
        <AsyncLogger name="metrics_logger" level="INFO" additivity="false">
            <AppenderRef ref="MetricsLog"/>
        </AsyncLogger>

        <Root level="INFO">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
