<?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="INFO" shutdownHook="disable" packages="org.apache.geode">
    <Properties>
        <Property name="geode-pattern">[%level{lowerCase=true} %date{yyyy/MM/dd HH:mm:ss.SSS z} &lt;%thread&gt; tid=%hexTid] %message%n%throwable%n</Property>
        <Property name="geode-default">true</Property>
    </Properties>
    <Appenders>
        <GeodeConsole name="STDOUT" target="SYSTEM_OUT" debug="true">
            <PatternLayout pattern="${geode-pattern}"/>
        </GeodeConsole>
        <GeodeLogWriter name="LOGWRITER">
            <PatternLayout pattern="${geode-pattern}"/>
        </GeodeLogWriter>
        <GeodeLogWriter name="SECURITYLOGWRITER" security="true">
            <PatternLayout pattern="${geode-pattern}"/>
        </GeodeLogWriter>
        <GeodeAlert name="ALERT"/>
    </Appenders>
    <Loggers>
        <Logger name="com.gemstone" level="INFO" additivity="true"/>
        <Logger name="org.apache.geode" level="INFO" additivity="true">
            <filters>
                <MarkerFilter marker="GEODE_VERBOSE" onMatch="DENY" onMismatch="NEUTRAL"/>
            </filters>
        </Logger>
        <Logger name="org.apache.geode.security" level="INFO" additivity="false">
            <AppenderRef ref="SECURITYLOGWRITER"/>
        </Logger>
        <Logger name="org.jgroups" level="FATAL" additivity="true"/>
        <Logger name="org.eclipse.jetty" level="FATAL" additivity="true"/>
        <Root level="INFO">
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="LOGWRITER"/>
            <AppenderRef ref="ALERT"/>
        </Root>
    </Loggers>
</Configuration>
