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

# Write out everything at the DEBUG level to the debug log
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=${org.apache.accumulo.core.dir.log}/${org.apache.accumulo.core.application}_${accumulo.service.instance}${org.apache.accumulo.core.ip.localhost.hostname}_fromprops.debug.log
log4j.appender.A2.MaxFileSize=1000MB
log4j.appender.A2.MaxBackupIndex=10
log4j.appender.A2.Threshold=DEBUG
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n

# Write out INFO and higher to the regular log
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=${org.apache.accumulo.core.dir.log}/${org.apache.accumulo.core.application}_${accumulo.service.instance}${org.apache.accumulo.core.ip.localhost.hostname}_fromprops.log
log4j.appender.A3.MaxFileSize=1000MB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.Threshold=INFO
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n

# Send all logging data to a centralized logger
# If the centralized logger is down, buffer the log events, but drop them if it stays down
log4j.appender.ASYNC=org.apache.accumulo.core.util.AsyncSocketAppender
log4j.appender.ASYNC.RemoteHost=${org.apache.accumulo.core.host.log}
log4j.appender.ASYNC.Port=${org.apache.accumulo.core.host.log.port}
log4j.appender.ASYNC.Application=${org.apache.accumulo.core.application}:${org.apache.accumulo.core.ip.localhost.hostname}
log4j.appender.ASYNC.Threshold=WARN

# Log accumulo events to the debug, normal and remote logs.
log4j.logger.org.apache.accumulo=DEBUG, A2, A3, ASYNC
log4j.additivity.org.apache.accumulo=false

# change to INFO for authorization events
log4j.logger.org.apache.accumulo.server.security.Auditor=WARN

log4j.logger.org.apache.accumulo.core.file.rfile.bcfile=INFO

log4j.logger.org.apache.accumulo.examples.wikisearch=INFO

log4j.logger.org.mortbay.log=WARN

log4j.logger.com.yahoo.zookeeper=ERROR

# Log non-accumulo events to the debug and normal logs
log4j.rootLogger=INFO, A2, A3
