<?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.
  -->
<!-- We're configuring testing to be synchronous due to "logging polution", see SOLR-13268 -->
<Configuration>
  <Appenders>
    <Console name="STDERR" target="SYSTEM_ERR">
      <PatternLayout>
        <Pattern>
          %maxLen{%-4r %-5p (%t) [%notEmpty{n:%X{node_name}}%notEmpty{ c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{
          =>%ex{short}}}{10240}%n
        </Pattern>
      </PatternLayout>
    </Console>

    <RollingRandomAccessFile
            name="MainLogFile"
            fileName="${sys:log.dir:-logs}/${sys:log.name:-solr}.log"
            filePattern="${sys:log.dir:-logs}/${sys:log.name:-solr}.log.%i">
      <PatternLayout>
        <Pattern>
          %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}] %c{1.}
          %m%notEmpty{ =>%ex{short}}}{10240}%n
        </Pattern>
      </PatternLayout>
      <Policies>
        <OnStartupTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="128 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="10"/>
    </RollingRandomAccessFile>
  </Appenders>
  <Loggers>


    <Logger name="kafka.server.KafkaConfig" level="WARN"/>
    <Logger name="org.apache.kafka.clients.producer.ProducerConfig" level="WARN"/>
    <Logger name="org.apache.kafka.clients.consumer.ConsumerConfig" level="WARN"/>
    <Logger name="org.apache.kafka.clients.admin.AdminClientConfig" level="WARN"/>


    <Logger name="org.apache.zookeeper" level="WARN"/>
    <Logger name="org.apache.hadoop" level="WARN"/>
    <Logger name="org.apache.directory" level="WARN"/>
    <Logger name="org.apache.solr.hadoop" level="INFO"/>
    <Logger name="org.eclipse.jetty" level="INFO"/>

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