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

---
# LoggerLevel: |DEBUG|INFO|WARN|ERROR|FATAL
logger_level: DEBUG

# LoggerFile: used to output the name of log.可配置绝对路径，也可以配置用于拼接CHASSIS_HOME的相对路径。
logger_file: log/mesher.log

# LogFormatText:设定日志的输出格式是 json 还是 plaintext (类似于log4j)，默认为 false，不建议修改，如果开发过程中想本地查看日志的话，
# 可以设定 LoggerFile 和 LogFormatText 为 true，这样会输出类似于 log4j 格式的本地日志。
log_format_text: false

#rollingPolicy daily/size;用于配置根据时间，还是根据大小进行日志rotate操作。
rollingPolicy: size

# MaxDaily of a log file before rotate. By D Days.；日志rotate时间配置，单位"day"。
log_rotate_date: 1

# MaxSize of a log file before rotate. By M Bytes.；日志rotate文件大小配置，单位"MB"。
log_rotate_size: 10

# Max counts to keep of a log's backup files.日志最大存储数量，单位“个”。
log_backup_count: 7