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

menu "System Logging Utilities"

config 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 CONFIG_FEATURE_ROTATE_LOGFILE
	bool "  Rotate message files"
	default n
	depends on CONFIG_SYSLOGD
	help
	  This enables syslogd to rotate the message files
	  on his own. No need to use an external rotatescript.

config CONFIG_FEATURE_REMOTE_LOG
	bool "  Remote Log support"
	default n
	depends on CONFIG_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 CONFIG_FEATURE_IPC_SYSLOG
	bool "  Circular Buffer support"
	default n
	depends on CONFIG_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 CONFIG_LOGREAD
	bool "  logread"
	default y
	depends on CONFIG_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 CONFIG_KLOGD
	bool "klogd"
	default n
	depends on CONFIG_SYSLOGD
	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 CONFIG_LOGGER
	bool "logger"
	default n
	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

