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

#########################################################################
#       Default java.util.logging configuration for Ignite.
#
# To use another config file use `java.util.logging.config.file` system
# property. For example `java -Djava.util.logging.config.file=myfile`
#########################################################################

#
# Comma-separated list of logging "handlers". Note that some of them may be
# reconfigured (or even removed) at runtime according to system properties.
#
# By default all messages will be passed to console and file.
#
handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler

#
# Default global logging level.
# This specifies which kinds of events are logged across all loggers.
# For any given category this global level can be overriden by a category
# specific level.
# Note that handlers also have a separate level setting to limit messages
# printed through it.
#
.level=INFO

# Console handler logs all messages with importance level `INFO` and above
# into standard error stream (`System.err`).
#
java.util.logging.ConsoleHandler.formatter = org.apache.ignite.lang.JavaLoggerFormatter
java.util.logging.ConsoleHandler.level = INFO

#
# File handler logs all messages into files with pattern `ignite-%g.log`
# under `target` directory.
#
java.util.logging.FileHandler.formatter = org.apache.ignite.lang.JavaLoggerFormatter
java.util.logging.FileHandler.pattern = target/ignite-%g.log
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.limit = 10485760
java.util.logging.FileHandler.count = 10
