# 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.

log4j.rootLogger=INFO,console_err,file

log4j.logger.org.apache.http=WARN
log4j.logger.org.apache.ignite.spi.checkpoint.noop.NoopCheckpointSpi=OFF
log4j.logger.org.apache.ignite.internal.managers.collision.GridCollisionManager=ERROR
log4j.logger.org.apache.commons.beanutils=WARN
log4j.logger.sun.net.www.protocol.http=WARN

# Configure console appender.
log4j.appender.console_err=org.apache.log4j.ConsoleAppender
log4j.appender.console_err.Threshold=WARN
log4j.appender.console_err.layout=org.apache.log4j.PatternLayout
log4j.appender.console_err.layout.ConversionPattern=[%d{ISO8601}][%-5p][%t][%c{1}] %m%n

# Configure console appender.
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{ISO8601}][%-5p][%t][%c{1}] %m%n
log4j.appender.console.filter.a=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.console.filter.a.LevelToMatch=INFO
log4j.appender.console.filter.a.AcceptOnMatch=true
log4j.appender.console.filter.b=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.console.filter.b.LevelToMatch=ERROR
log4j.appender.console.filter.b.AcceptOnMatch=false
log4j.appender.console.filter.c=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.console.filter.c.LevelToMatch=WARN
log4j.appender.console.filter.c.AcceptOnMatch=false

log4j.category.org.apache.ignite.console=INFO,console

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/ignite-web-agent.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{ISO8601}][%-5p][%t][%c{1}] %m%n
