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

syscfg.defs:
    MODLOG_MAX_MAPPINGS:
        description: >
            Maximum number of log module mappings that can be configured.
        value: 16
    MODLOG_MAX_PRINTF_LEN:
        description: >
            Maximum length of data that can be logged with `modlog_printf()`
            (after format specifiers are expanded).
        value: 128
    MODLOG_CONSOLE_DFLT:
        description: >
            Automatically create a default mapping to the console log.
        value: 1
    MODLOG_LOG_MACROS:
        description: >
            Retires the old `LOG_[...]` macros and redefines them to use
            modlog.  That is, if enabled, this setting allows the following
            code:
                LOG_DEBUG(LOG_MODULE_DFLT, "hello");
            This line logs the string "hello" to the default module using
            modlog.  This setting will be enabled by default in a future
            release.
        value: 0
