#
# 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 CLI module.
#
# 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.
handlers=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 overridden 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 `SEVERE` and above
# into standard error stream (`System.err`).
#
java.util.logging.FileHandler.formatter = org.apache.ignite.internal.lang.JavaLoggerFormatter
java.util.logging.FileHandler.pattern = ignite-%g.log
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.limit = 10485760
java.util.logging.FileHandler.count = 10
