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

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_DEFAULT_MINIMAL
	bool
