#/**
#* @@@ START COPYRIGHT @@@
#
#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.
#
# @@@ END COPYRIGHT @@@
# */
# Define some default values that can be overridden by system properties
wms.root.logger=INFO, console
wms.security.logger=INFO, console
wms.log.dir=.
wms.log.file=wms.log

# Define the root logger to the system property "wms.root.logger".
log4j.rootLogger=${wms.root.logger}

# Logging Threshold
log4j.threshold=ALL

#
# Daily Rolling File Appender
#
log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRFA.File=${wms.log.dir}/${wms.log.file}

# Rollver at midnight
log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

# 30-day backup
#log4j.appender.DRFA.MaxBackupIndex=30
log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout

# Pattern format: Date LogLevel LoggerName LogMessage
log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

# Debugging Pattern format
#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n

#
# Security audit appender
#
wms.security.log.file=SecurityAuth.audit
log4j.appender.DRFAS=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.DRFAS.File=${wms.log.dir}/${wms.security.log.file}
log4j.appender.DRFAS.layout=org.apache.log4j.PatternLayout
log4j.appender.DRFAS.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
log4j.category.SecurityLogger=${wms.security.logger}
log4j.additivity.SecurityLogger=false
#log4j.logger.SecurityLogger.org.apache.hadoop.wms.security.access.AccessController=TRACE

#
# Null Appender
#
log4j.appender.NullAppender=org.apache.log4j.varia.NullAppender

#
# console
# Add "console" to rootlogger above if you want to use this 
#
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

# Custom Logging levels

#log4j.logger.org.apache.zookeeper=INFO
# Uncomment this line to enable tracing of ServerManager in WmsMaster
#log4j.logger.org.trafodion.wms.master.ServerManager=DEBUG
# Uncomment this line to enable tracing of ServerManager in WmsServer
#log4j.logger.org.trafodion.wms.server.ServerManager=DEBUG
# Uncomment this line to enable tracing on RPC calls in WmsMaster
#log4j.logger.org.trafodion.wms.master.rpc.thrift.ThriftRpcHandler=DEBUG
# Uncomment this line to enable tracing on RPC calls in WmsServer
#log4j.logger.org.trafodion.wms.server.rpc.thrift.ThriftRpcHandler=DEBUG
# Uncomment this line to enable tracing on RPC server in WmsServer
#log4j.logger.org.trafodion.wms.server.rpc.thrift.ThriftRpcServer=DEBUG
# Uncomment this line to enable tracing of CEP
#log4j.logger.org.trafodion.wms.cep.ComplexEventProcessor=DEBUG
# Uncomment this line to enable tracing of WorkloadStore
#log4j.logger.org.trafodion.wms.server.workload.WorkloadStore=DEBUG
# Uncomment this line to enable tracing of WmsClient
#log4j.logger.org.trafodion.wms.client.WmsClient=DEBUG
# Uncomment this line to enable tracing on JTClient
#log4j.logger.org.trafodion.wms.server.JTClient=DEBUG
# Uncomment this line to enable tracing on Vertica client
#log4j.logger.org.trafodion.wms.server.connectors.VerticaClient=DEBUG