#
# 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_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
	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 "logread 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
	depends on SYSLOGD
	select FEATURE_SYSLOG
	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

