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

# suppress inspection "UnusedProperty" for whole file

log.name = Apache Sling Logging Configuration
log.description = Global configuration setup for the Sling OSGi LogService \
 implementation. See http://sling.apache.org/site/logging.html for more \
 detailed documentation and description.
log.level.name = Log Level
log.level.description = Root Logger log level setting.
log.file.name = Log File
log.file.description = The name and path of the log file. If this is empty, \
 logging goes to standard output (the console). If this path is relative it \
 is resolved below ${sling.home}.
log.config.file.name = Logback Config File
log.config.file.description = The name and path of the Logback Config file. If \
  this is empty, then default configuration would be used. If this path is relative it \
 is resolved below ${sling.home}. See http://logback.qos.ch/manual/ for details.
log.file.number.name = Number of Log Files
log.file.number.description = The number of log files to keep. When the threshold of \
 the log file reaches the configured maximum (see Log File Threshold), \
 the log file is copied and a new log file is created. This setting specifies \
 how many generations (incl. the active log file) should be kept. This is a \
 positive numeric value. The default value is 5. This property is ignored if \
 the Log File Threshold property specifies time/date controlled log file \
 rotation.
log.file.size.name = Log File Threshold
log.file.size.description = Controls the rotation of the log file by setting \
 a maximum file size or a time/date schedule at which to rotate the log file. \
 A size limit can be specified setting a pure number indicating the number \
 of bytes or a number with a size indicator KB, MB, or GB (case is ignored). \
  A time/date schedule can be specified as a java.util.SimpleDateFormat \
  pattern. The default is "'.'yyyy-MM-dd" (daily log rotation).

log.pattern.name = Message Pattern
log.pattern.description = Message Pattern for formatting the log messages. For \
  complete details refer to http://logback.qos.ch/manual/layouts.html#ClassicPatternLayout
 
log.factory.writer.name = Apache Sling Logging Writer Configuration
log.factory.writer.description = Configure a Logger Writer for Sling Logging. \
 See http://sling.apache.org/site/logging.html for more detailed documentation \
 and description.
 
log.factory.config.name = Apache Sling Logging Logger Configuration
log.factory.config.description = Configure Loggers with levels, pattern and \
 destination. See http://sling.apache.org/site/logging.html for more detailed \
 documentation and description.
 
log.loggers.name = Logger
log.loggers.description = The logger names applicable for this logger \
 configuration. Each logger name applies for any child category unless configured \
 otherwise. E.g. a logger name of org.apache.sling applies to logger \
 org.apache.sling.commons unless there is a different configuration for \
 org.apache.sling.commons.

log.config.packagingData.name = Packaging Data
log.config.packagingData.description = Include the packaging data which provide \
  details about jar name and version of jar from which the class is loaded as part \
  of stacktrace. See http://logback.qos.ch/reasonsToSwitch.html#packagingData

log.config.maxCallerDataDepth.name = Max Caller Depth
log.config.maxCallerDataDepth.description = The stack data depth computed during caller data \
  extraction. See http://logback.qos.ch/manual/layouts.html#caller

log.file.buffered.name = Buffered Logging
log.file.buffered.description = By default logging events are immediately written to disk \
  and will not be lost in case your application exits without properly closing appenders. \
  If set to true  and if appenders are not closed properly when your application exits, then \
  logging events not yet written to disk may be lost. See http://logback.qos.ch/manual/encoders.html#immediateFlush

log.additiv.name = Additivity
log.additiv.description = If set to false then logs from these loggers would not be sent \
   to any appender attached higher in the hierarchy

log.config.maxOldFileCountInDump.name = Max Count of files in dump
log.config.maxOldFileCountInDump.description = Maximum number of old rolled over files for each \
  active file to be included while generating the dump as part of Status zip support

log.config.numOfLines.name = Number of lines
log.config.numOfLines.description = Number of lines from each log files to include while generating the \
  dump in 'txt' mode. If set to -1 then whole file would be included