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

