#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "System Logging Utilities"

INSERT

config SYSLOGD
	bool "syslogd"
	default y
	help
	  The syslogd utility is used to record logs of all the
	  significant events that occur on a system. Every
	  message that is logged records the date and time of the
	  event, and will generally also record the name of the
	  application that generated the message. When used in
	  conjunction with klogd, messages from the Linux kernel
	  can also be recorded. This is terribly useful,
	  especially for finding what happened when something goes
	  wrong. And something almost always will go wrong if
	  you wait long enough....

config FEATURE_ROTATE_LOGFILE
	bool "Rotate message files"
	default y
	depends on SYSLOGD
	help
	  This enables syslogd to rotate the message files
	  on his own. No need to use an external rotatescript.

config FEATURE_REMOTE_LOG
	bool "Remote Log support"
	default y
	depends on SYSLOGD
	help
	  When you enable this feature, the syslogd utility can
	  be used to send system log messages to another system
	  connected via a network. This allows the remote
	  machine to log all the system messages, which can be
	  terribly useful for reducing the number of serial
	  cables you use. It can also be a very good security
	  measure to prevent system logs from being tampered with
	  by an intruder.

config FEATURE_SYSLOGD_DUP
	bool "Support -D (drop dups) option"
	default y
	depends on SYSLOGD
	help
	  Option -D instructs syslogd to drop consecutive messages
	  which are totally the same.

config FEATURE_SYSLOGD_READ_BUFFER_SIZE
	int "Read buffer size in bytes"
	default 256
	range 256 20000
	depends on SYSLOGD
	help
	  This option sets the size of the syslog read buffer.
	  Actual memory usage increases around five times the
	  change done here.

config FEATURE_IPC_SYSLOG
	bool "Circular Buffer support"
	default y
	depends on SYSLOGD
	help
	  When you enable this feature, the syslogd utility will
	  use a circular buffer to record system log messages.
	  When the buffer is filled it will continue to overwrite
	  the oldest messages. This can be very useful for
	  systems with little or no permanent storage, since
	  otherwise system logs can eventually fill up your
	  entire filesystem, which may cause your system to
	  break badly.

config FEATURE_IPC_SYSLOG_BUFFER_SIZE
	int "Circular buffer size in Kbytes (minimum 4KB)"
	default 16
	range 4 2147483647
	depends on FEATURE_IPC_SYSLOG
	help
	  This option sets the size of the circular buffer
	  used to record system log messages.

config LOGREAD
	bool "logread"
	default y
	depends on FEATURE_IPC_SYSLOG
	help
	  If you enabled Circular Buffer support, you almost
	  certainly want to enable this feature as well. This
	  utility will allow you to read the messages that are
	  stored in the syslogd circular buffer.

config FEATURE_LOGREAD_REDUCED_LOCKING
	bool "Double buffering"
	default y
	depends on LOGREAD
	help
	  'logread' ouput to slow serial terminals can have
	  side effects on syslog because of the semaphore.
	  This option make logread to double buffer copy
	  from circular buffer, minimizing semaphore
	  contention at some minor memory expense.

config KLOGD
	bool "klogd"
	default y
	help
	  klogd is a utility which intercepts and logs all
	  messages from the Linux kernel and sends the messages
	  out to the 'syslogd' utility so they can be logged. If
	  you wish to record the messages produced by the kernel,
	  you should enable this option.

config FEATURE_KLOGD_KLOGCTL
	bool "Use the klogctl() interface"
	default y
	depends on KLOGD
	select PLATFORM_LINUX
	help
	  The klogd applet supports two interfaces for reading
	  kernel messages. Linux provides the klogctl() interface
	  which allows reading messages from the kernel ring buffer
	  independently from the file system.

	  If you answer 'N' here, klogd will use the more portable
	  approach of reading them from /proc or a device node.
	  However, this method requires the file to be available.

	  If in doubt, say 'Y'.

config LOGGER
	bool "logger"
	default y
	select FEATURE_SYSLOG
	help
	    The logger utility allows you to send arbitrary text
	    messages to the system log (i.e. the 'syslogd' utility) so
	    they can be logged. This is generally used to help locate
	    problems that occur within programs and scripts.

endmenu
