# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

choice LOG_MODE
	prompt "Mode"
	depends on !LOG_FRONTEND_ONLY
	default LOG_MODE_MINIMAL if LOG_DEFAULT_MINIMAL
	default LOG_MODE_DEFERRED

config LOG_MODE_DEFERRED
	bool "Deferred logging"
	select MPSC_PBUF
	help
	  Log messages are buffered and processed later. This mode has the
	  least impact on the application. Time consuming processing is
	  deferred to the known context.

config LOG_MODE_IMMEDIATE
	bool "Synchronous"
	help
	  When enabled log is processed in the context of the call. It impacts
	  performance of the system since time consuming operations are
	  performed in the context of the log entry (e.g. high priority
	  interrupt).Logger backends must support exclusive access to work
	  flawlessly in that mode because one log operation can be interrupted
	  by another one in the higher priority context.

config LOG_MODE_MINIMAL
	bool "Minimal-footprint"
	select PRINTK
	help
	  Enable minimal logging implementation. This has very little footprint
	  overhead on top of the printk() implementation for standard
	  logging macros. Hexdump macros are also supported, with a small
	  amount of code pulled in if used. Build time filtering is supported,
	  but not runtime filtering. There are no timestamps, prefixes,
	  colors, or asynchronous logging, and all messages are simply
	  sent to printk().

endchoice

config LOG_FRONTEND
	bool "Frontend"
	help
	  When enabled, logs are redirected to a custom frontend which is the
	  fastest way of getting logs out. The logs are redirected at the function
	  level. To redirect logs at the macro level, see LOG_CUSTOM_HEADER.

config LOG_FRONTEND_ONLY
	bool "No backends"
	depends on LOG_FRONTEND
	help
	  Option indicates that there are no backends intended to be used.
	  Code asserts if any backend is enabled.

config LOG_FRONTEND_OPT_API
	bool "Frontend optimized API"
	help
	  When enabled, frontend implements functions which are optimized versions
	  used for the most common log messages.

config LOG_CUSTOM_HEADER
	bool "Include Custom Log Header"
	help
	  When enabled, a custom application provided header, named
	  "zephyr_custom_log.h", is included at the end of log.h. This enables
	  extension of the LOG_* APIs at the macro level. Please use cautiously!
	  The internal LOG API may change in future releases.

config LOG_DEFAULT_MINIMAL
	bool

config LOG_MULTIDOMAIN
	bool "Multi-domain logger"
	select LOG_TIMESTAMP_64BIT
