# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "Logging"

config LOG
	bool "Logging"
	select PRINTK if USERSPACE
	help
	  Global switch for the logger, when turned off log calls will not be
	  compiled in.

if LOG

rsource "Kconfig.mode"

rsource "Kconfig.filtering"

rsource "Kconfig.processing"

if !LOG_MODE_MINIMAL

rsource "Kconfig.formatting"

if !LOG_FRONTEND_ONLY

rsource "Kconfig.backends"

endif # !LOG_FRONTEND_ONLY

endif # !LOG_MODE_MINIMAL

if LOG_FRONTEND

rsource "Kconfig.frontends"

endif #LOG_FRONTEND

rsource "Kconfig.misc"

endif # LOG

config LOG_OUTPUT
	bool "Formatter helper"
	help
	  Module which provides formatting of log messages to a human-readable
	  strings.

endmenu
