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

# ====================================
# The Default Settings for a log panel within Chainsaw
# ====================================
logpanel.paused=false
logpanel.clearTableExpression=
logpanel.alwaysDisplayExpression=
logpanel.hiddenExpression=
logpanel.dateFormatTimeZone=
logpanel.hiddenLoggers=
logpanel.logTreePanelVisible=true
logpanel.toolTipsVisible=false
logpanel.thumbnailBarToolTipsVisible=false
logpanel.showMillisDeltaAsGap=false
logpanel.scrollToBottom=true
logpanel.detailPaneVisible=true
logpanel.loggerPrecision=0
logpanel.searchResultsVisible=true
logpanel.wrapMsg=true
logpanel.visibleOrderedColumnNames=
logpanel.levelIconsDisplayed=false
logpanel.highlightSearchMatchText=true
logpanel.lowerPanelDividerLocation=475
logpanel.logTreeDividerLocation=230
dateFormatPattern=HH:mm:ss
