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

menu "System Logging Utilities"

config SYSLOGD
	bool "syslogd"
	default n
	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 n
	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 n
	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 n
	depends on SYSLOGD
	help
	  Option -D instructs syslogd to drop consecutive messages
	  which are totally the same.

config FEATURE_IPC_SYSLOG
	bool "Circular Buffer support"
	default n
	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 n
	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 n
	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 LOGGER
	bool "logger"
	default n
	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

