# 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 Accumulo Monitor
## The system properties referenced below are configured by accumulo-env.sh

## Define a console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=ALL
log4j.appender.console.layout.ConversionPattern=%d{ISO8601} [%-8c{2}] %-5p: %m%n
log4j.appender.console.layout=org.apache.log4j.PatternLayout

## Define an appender for the Accumulo Monitor to log to its own web GUI
log4j.appender.gui=org.apache.accumulo.server.monitor.LogService
log4j.appender.gui.Threshold=WARN

## Append monitor logs to its own web GUI
log4j.logger.org.apache.accumulo=INHERITED, gui

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