# 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 1.2 file that configures logging for all Accumulo services (Master, TabletServer, GC, and Tracer) except Monitor
## The system properties referenced below are configured by accumulo-env.sh

## Define a log file appender
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${accumulo.log.dir}/${accumulo.application}.log
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.Threshold=ALL
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n

## Define an appender to send important logs to the the primary Accumulo Monitor
## The primary monitor is the one currently holding a shared lock in ZooKeeper,
## and is typically the one that started first.
log4j.appender.monitor=org.apache.accumulo.monitor.util.AccumuloMonitorAppender
log4j.appender.monitor.Threshold=WARN

## Uncomment to define a log file appender for audit logs
#log4j.appender.audit=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.audit.File=${accumulo.log.dir}/${accumulo.application}.audit
#log4j.appender.audit.DatePattern='.'yyyy-MM-dd
#log4j.appender.audit.layout=org.apache.log4j.PatternLayout
#log4j.appender.audit.layout.ConversionPattern=%d{ISO8601} [%c{2}] %-5p: %m%n
#log4j.additivity.org.apache.accumulo.audit=false

## Change this log level from OFF to one of the following to enable audit logging:
##   INFO
##     enables audit logging (inherit appenders from root logger)
##   INFO, audit
##     enables audit logging using the audit log appender
##     (requires audit log file appender above to be uncommented)
log4j.logger.org.apache.accumulo.audit=OFF

## Append logs to the primary Accumulo Monitor
log4j.logger.org.apache.accumulo=INHERITED, monitor

## Constrain some particularly spammy loggers
log4j.logger.org.apache.accumulo.core.file.rfile.bcfile=INFO
log4j.logger.org.apache.zookeeper=ERROR

## Append most logs to file
log4j.rootLogger=INFO, file
