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

####
# OFBiz Debug Settings
####

# These top level switches are used before calling Log4J, or if Log4J is not used
print.verbose=false
print.timing=true
print.info=true
print.important=true
print.warning=true
print.error=true
print.fatal=true

## Root log location to display on webtools https://localhost:8443/webtools/control/LogView
# log4j.appender.css.dir=runtime/logs/
## File to display on webtools https://localhost:8443/webtools/control/LogView
# log4j.appender.css.defaultFile=ofbiz.log
## RegExp use to filter file available on dropdown selection to diplay log on https://localhost:8443/webtools/control/FetchLog
# log4j.appender.css.fileNameRegExp=[(ofbiz)|(error)].*