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

