aboutsummaryrefslogtreecommitdiff
path: root/manual/syslog.texi
diff options
context:
space:
mode:
Diffstat (limited to 'manual/syslog.texi')
-rw-r--r--manual/syslog.texi578
1 files changed, 0 insertions, 578 deletions
diff --git a/manual/syslog.texi b/manual/syslog.texi
deleted file mode 100644
index 7b73a091fe..0000000000
--- a/manual/syslog.texi
+++ /dev/null
@@ -1,578 +0,0 @@
-@node Syslog, Mathematics, Low-Level Terminal Interface, Top
-@c %MENU% System logging and messaging
-@chapter Syslog
-
-
-This chapter describes facilities for issuing and logging messages of
-system administration interest. This chapter has nothing to do with
-programs issuing messages to their own users or keeping private logs
-(One would typically do that with the facilities described in
-@ref{I/O on Streams}).
-
-Most systems have a facility called ``Syslog'' that allows programs to
-submit messages of interest to system administrators and can be
-configured to pass these messages on in various ways, such as printing
-on the console, mailing to a particular person, or recording in a log
-file for future reference.
-
-A program uses the facilities in this chapter to submit such messages.
-
-@menu
-* Overview of Syslog:: Overview of a system's Syslog facility
-* Submitting Syslog Messages:: Functions to submit messages to Syslog
-@end menu
-
-@node Overview of Syslog
-@section Overview of Syslog
-
-System administrators have to deal with lots of different kinds of
-messages from a plethora of subsystems within each system, and usually
-lots of systems as well. For example, an FTP server might report every
-connection it gets. The kernel might report hardware failures on a disk
-drive. A DNS server might report usage statistics at regular intervals.
-
-Some of these messages need to be brought to a system administrator's
-attention immediately. And it may not be just any system administrator
--- there may be a particular system administrator who deals with a
-particular kind of message. Other messages just need to be recorded for
-future reference if there is a problem. Still others may need to have
-information extracted from them by an automated process that generates
-monthly reports.
-
-To deal with these messages, most Unix systems have a facility called
-"Syslog." It is generally based on a daemon called ``Syslogd''
-Syslogd listens for messages on a Unix domain socket named
-@file{/dev/log}. Based on classification information in the messages
-and its configuration file (usually @file{/etc/syslog.conf}), Syslogd
-routes them in various ways. Some of the popular routings are:
-
-@itemize @bullet
-@item
-Write to the system console
-@item
-Mail to a specific user
-@item
-Write to a log file
-@item
-Pass to another daemon
-@item
-Discard
-@end itemize
-
-Syslogd can also handle messages from other systems. It listens on the
-@code{syslog} UDP port as well as the local socket for messages.
-
-Syslog can handle messages from the kernel itself. But the kernel
-doesn't write to @file{/dev/log}; rather, another daemon (sometimes
-called ``Klogd'') extracts messages from the kernel and passes them on to
-Syslog as any other process would (and it properly identifies them as
-messages from the kernel).
-
-Syslog can even handle messages that the kernel issued before Syslogd or
-Klogd was running. A Linux kernel, for example, stores startup messages
-in a kernel message ring and they are normally still there when Klogd
-later starts up. Assuming Syslogd is running by the time Klogd starts,
-Klogd then passes everything in the message ring to it.
-
-In order to classify messages for disposition, Syslog requires any process
-that submits a message to it to provide two pieces of classification
-information with it:
-
-@table @asis
-@item facility
-This identifies who submitted the message. There are a small number of
-facilities defined. The kernel, the mail subsystem, and an FTP server
-are examples of recognized facilities. For the complete list,
-@xref{syslog; vsyslog}. Keep in mind that these are
-essentially arbitrary classifications. "Mail subsystem" doesn't have any
-more meaning than the system administrator gives to it.
-
-@item priority
-This tells how important the content of the message is. Examples of
-defined priority values are: debug, informational, warning and critical.
-For the complete list, see @ref{syslog; vsyslog}. Except for
-the fact that the priorities have a defined order, the meaning of each
-of these priorities is entirely determined by the system administrator.
-
-@end table
-
-A ``facility/priority'' is a number that indicates both the facility
-and the priority.
-
-@strong{Warning:} This terminology is not universal. Some people use
-``level'' to refer to the priority and ``priority'' to refer to the
-combination of facility and priority. A Linux kernel has a concept of a
-message ``level,'' which corresponds both to a Syslog priority and to a
-Syslog facility/priority (It can be both because the facility code for
-the kernel is zero, and that makes priority and facility/priority the
-same value).
-
-@Theglibc{} provides functions to submit messages to Syslog. They
-do it by writing to the @file{/dev/log} socket. @xref{Submitting Syslog
-Messages}.
-
-The @glibcadj{} functions only work to submit messages to the Syslog
-facility on the same system. To submit a message to the Syslog facility
-on another system, use the socket I/O functions to write a UDP datagram
-to the @code{syslog} UDP port on that system. @xref{Sockets}.
-
-
-@node Submitting Syslog Messages
-@section Submitting Syslog Messages
-
-@Theglibc{} provides functions to submit messages to the Syslog
-facility:
-
-@menu
-* openlog:: Open connection to Syslog
-* syslog; vsyslog:: Submit message to Syslog
-* closelog:: Close connection to Syslog
-* setlogmask:: Cause certain messages to be ignored
-* Syslog Example:: Example of all of the above
-@end menu
-
-These functions only work to submit messages to the Syslog facility on
-the same system. To submit a message to the Syslog facility on another
-system, use the socket I/O functions to write a UDP datagram to the
-@code{syslog} UDP port on that system. @xref{Sockets}.
-
-
-
-@node openlog
-@subsection openlog
-
-The symbols referred to in this section are declared in the file
-@file{syslog.h}.
-
-@comment syslog.h
-@comment BSD
-@deftypefun void openlog (const char *@var{ident}, int @var{option}, int @var{facility})
-@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
-@c openlog @asulock @aculock @acsfd
-@c libc_lock_lock @asulock @aculock
-@c openlog_internal @acsfd [always guarded by syslog_lock, so no race]
-@c strncpy dup ok
-@c socket dup @acsfd
-@c fcntl dup ok
-@c connect dup ok
-@c close dup @acsfd
-@c cancel_handler(NULL) @aculock
-@c libc_lock_unlock @aculock
-
-@code{openlog} opens or reopens a connection to Syslog in preparation
-for submitting messages.
-
-@var{ident} is an arbitrary identification string which future
-@code{syslog} invocations will prefix to each message. This is intended
-to identify the source of the message, and people conventionally set it
-to the name of the program that will submit the messages.
-
-If @var{ident} is NULL, or if @code{openlog} is not called, the default
-identification string used in Syslog messages will be the program name,
-taken from argv[0].
-
-Please note that the string pointer @var{ident} will be retained
-internally by the Syslog routines. You must not free the memory that
-@var{ident} points to. It is also dangerous to pass a reference to an
-automatic variable since leaving the scope would mean ending the
-lifetime of the variable. If you want to change the @var{ident} string,
-you must call @code{openlog} again; overwriting the string pointed to by
-@var{ident} is not thread-safe.
-
-You can cause the Syslog routines to drop the reference to @var{ident} and
-go back to the default string (the program name taken from argv[0]), by
-calling @code{closelog}: @xref{closelog}.
-
-In particular, if you are writing code for a shared library that might get
-loaded and then unloaded (e.g. a PAM module), and you use @code{openlog},
-you must call @code{closelog} before any point where your library might
-get unloaded, as in this example:
-
-@smallexample
-#include <syslog.h>
-
-void
-shared_library_function (void)
-@{
- openlog ("mylibrary", option, priority);
-
- syslog (LOG_INFO, "shared library has been invoked");
-
- closelog ();
-@}
-@end smallexample
-
-Without the call to @code{closelog}, future invocations of @code{syslog}
-by the program using the shared library may crash, if the library gets
-unloaded and the memory containing the string @code{"mylibrary"} becomes
-unmapped. This is a limitation of the BSD syslog interface.
-
-@code{openlog} may or may not open the @file{/dev/log} socket, depending
-on @var{option}. If it does, it tries to open it and connect it as a
-stream socket. If that doesn't work, it tries to open it and connect it
-as a datagram socket. The socket has the ``Close on Exec'' attribute,
-so the kernel will close it if the process performs an exec.
-
-You don't have to use @code{openlog}. If you call @code{syslog} without
-having called @code{openlog}, @code{syslog} just opens the connection
-implicitly and uses defaults for the information in @var{ident} and
-@var{options}.
-
-@var{options} is a bit string, with the bits as defined by the following
-single bit masks:
-
-@vtable @code
-@item LOG_PERROR
-If on, @code{openlog} sets up the connection so that any @code{syslog}
-on this connection writes its message to the calling process' Standard
-Error stream in addition to submitting it to Syslog. If off, @code{syslog}
-does not write the message to Standard Error.
-
-@item LOG_CONS
-If on, @code{openlog} sets up the connection so that a @code{syslog} on
-this connection that fails to submit a message to Syslog writes the
-message instead to system console. If off, @code{syslog} does not write
-to the system console (but of course Syslog may write messages it
-receives to the console).
-
-@item LOG_PID
-When on, @code{openlog} sets up the connection so that a @code{syslog}
-on this connection inserts the calling process' Process ID (PID) into
-the message. When off, @code{openlog} does not insert the PID.
-
-@item LOG_NDELAY
-When on, @code{openlog} opens and connects the @file{/dev/log} socket.
-When off, a future @code{syslog} call must open and connect the socket.
-
-@strong{Portability note:} In early systems, the sense of this bit was
-exactly the opposite.
-
-@item LOG_ODELAY
-This bit does nothing. It exists for backward compatibility.
-
-@end vtable
-
-If any other bit in @var{options} is on, the result is undefined.
-
-@var{facility} is the default facility code for this connection. A
-@code{syslog} on this connection that specifies default facility causes
-this facility to be associated with the message. See @code{syslog} for
-possible values. A value of zero means the default, which is
-@code{LOG_USER}.
-
-If a Syslog connection is already open when you call @code{openlog},
-@code{openlog} ``reopens'' the connection. Reopening is like opening
-except that if you specify zero for the default facility code, the
-default facility code simply remains unchanged and if you specify
-LOG_NDELAY and the socket is already open and connected, @code{openlog}
-just leaves it that way.
-
-@c There is a bug in closelog() (glibc 2.1.3) wherein it does not reset the
-@c default log facility to LOG_USER, which means the default default log
-@c facility could be whatever the default log facility was for a previous
-@c Syslog connection. I have documented what the function should be rather
-@c than what it is because I think if anyone ever gets concerned, the code
-@c will change.
-
-@end deftypefun
-
-
-@node syslog; vsyslog
-@subsection syslog, vsyslog
-
-The symbols referred to in this section are declared in the file
-@file{syslog.h}.
-
-@c syslog() is implemented as a call to vsyslog().
-@comment syslog.h
-@comment BSD
-@deftypefun void syslog (int @var{facility_priority}, const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
-@c syslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-@c va_start dup ok
-@c vsyslog_chk @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-@c syslog(INTERNALLOG) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-@c open_memstream @ascuheap @acsmem
-@c stpcpy dup ok
-@c getpid dup ok
-@c mempcpy dup ok
-@c fsetlocking [no @mtasurace:stream @asulock for exclusive stream]
-@c fprintf @mtslocale @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt on temp memstream]
-@c time dup ok
-@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
-@c strftime_l(C) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-@c ftell dup ok [no @asucorrupt @aculock @acucorrupt on temp memstream]
-@c fputs_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
-@c putc_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
-@c vfprintf/vfprintf_chk dup @mtslocale @ascuheap @acsmem [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
-@c fclose dup @ascuheap @acsmem [no @asulock @aculock @acsfd on caller-locked memstream]
-@c writev dup ok
-@c libc_lock_lock dup @asulock @aculock
-@c memset dup ok
-@c sigemptyset dup ok
-@c sigaction(SIGPIPE) dup @mtasusig:PIPE @acusig:PIPE
-@c openlog_internal dup @acsfd
-@c send dup ok
-@c closelog_internal dup @acsfd
-@c open dup @acsfd
-@c dprintf dup ok
-@c libc_lock_unlock @asulock @aculock
-@c free dup @acsuheap @acsmem
-@c va_end dup ok
-
-@code{syslog} submits a message to the Syslog facility. It does this by
-writing to the Unix domain socket @code{/dev/log}.
-
-@code{syslog} submits the message with the facility and priority indicated
-by @var{facility_priority}. The macro @code{LOG_MAKEPRI} generates a
-facility/priority from a facility and a priority, as in the following
-example:
-
-@smallexample
-LOG_MAKEPRI(LOG_USER, LOG_WARNING)
-@end smallexample
-
-The possible values for the facility code are (macros):
-
-@c Internally, there is also LOG_KERN, but LOG_KERN == 0, which means
-@c if you try to use it here, just selects default.
-
-@vtable @code
-@item LOG_USER
-A miscellaneous user process
-@item LOG_MAIL
-Mail
-@item LOG_DAEMON
-A miscellaneous system daemon
-@item LOG_AUTH
-Security (authorization)
-@item LOG_SYSLOG
-Syslog
-@item LOG_LPR
-Central printer
-@item LOG_NEWS
-Network news (e.g. Usenet)
-@item LOG_UUCP
-UUCP
-@item LOG_CRON
-Cron and At
-@item LOG_AUTHPRIV
-Private security (authorization)
-@item LOG_FTP
-Ftp server
-@item LOG_LOCAL0
-Locally defined
-@item LOG_LOCAL1
-Locally defined
-@item LOG_LOCAL2
-Locally defined
-@item LOG_LOCAL3
-Locally defined
-@item LOG_LOCAL4
-Locally defined
-@item LOG_LOCAL5
-Locally defined
-@item LOG_LOCAL6
-Locally defined
-@item LOG_LOCAL7
-Locally defined
-@end vtable
-
-Results are undefined if the facility code is anything else.
-
-@strong{NB:} @code{syslog} recognizes one other facility code: that of
-the kernel. But you can't specify that facility code with these
-functions. If you try, it looks the same to @code{syslog} as if you are
-requesting the default facility. But you wouldn't want to anyway,
-because any program that uses @theglibc{} is not the kernel.
-
-You can use just a priority code as @var{facility_priority}. In that
-case, @code{syslog} assumes the default facility established when the
-Syslog connection was opened. @xref{Syslog Example}.
-
-The possible values for the priority code are (macros):
-
-@vtable @code
-@item LOG_EMERG
-The message says the system is unusable.
-@item LOG_ALERT
-Action on the message must be taken immediately.
-@item LOG_CRIT
-The message states a critical condition.
-@item LOG_ERR
-The message describes an error.
-@item LOG_WARNING
-The message is a warning.
-@item LOG_NOTICE
-The message describes a normal but important event.
-@item LOG_INFO
-The message is purely informational.
-@item LOG_DEBUG
-The message is only for debugging purposes.
-@end vtable
-
-Results are undefined if the priority code is anything else.
-
-If the process does not presently have a Syslog connection open (i.e.,
-it did not call @code{openlog}), @code{syslog} implicitly opens the
-connection the same as @code{openlog} would, with the following defaults
-for information that would otherwise be included in an @code{openlog}
-call: The default identification string is the program name. The
-default default facility is @code{LOG_USER}. The default for all the
-connection options in @var{options} is as if those bits were off.
-@code{syslog} leaves the Syslog connection open.
-
-If the @file{/dev/log} socket is not open and connected, @code{syslog}
-opens and connects it, the same as @code{openlog} with the
-@code{LOG_NDELAY} option would.
-
-@code{syslog} leaves @file{/dev/log} open and connected unless its attempt
-to send the message failed, in which case @code{syslog} closes it (with the
-hope that a future implicit open will restore the Syslog connection to a
-usable state).
-
-Example:
-
-@smallexample
-
-#include <syslog.h>
-syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
- "Unable to make network connection to %s. Error=%m", host);
-
-@end smallexample
-
-@end deftypefun
-
-
-@comment syslog.h
-@comment BSD
-@deftypefun void vsyslog (int @var{facility_priority}, const char *@var{format}, va_list @var{arglist})
-@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
-@c vsyslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-@c vsyslog_chk dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
-
-This is functionally identical to @code{syslog}, with the BSD style variable
-length argument.
-
-@end deftypefun
-
-
-@node closelog
-@subsection closelog
-
-The symbols referred to in this section are declared in the file
-@file{syslog.h}.
-
-@comment syslog.h
-@comment BSD
-@deftypefun void closelog (void)
-@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
-@c closelog @asulock @aculock @acsfd
-@c libc_lock_lock @asulock @aculock
-@c closelog_internal @acsfd [always guarded by syslog_lock, so no race]
-@c close dup@acsfd
-@c cancel_handler(NULL) @aculock
-@c libc_lock_unlock @aculock
-
-@code{closelog} closes the current Syslog connection, if there is one.
-This includes closing the @file{/dev/log} socket, if it is open.
-@code{closelog} also sets the identification string for Syslog messages
-back to the default, if @code{openlog} was called with a non-NULL argument
-to @var{ident}. The default identification string is the program name
-taken from argv[0].
-
-If you are writing shared library code that uses @code{openlog} to
-generate custom syslog output, you should use @code{closelog} to drop
-@theglibc{}'s internal reference to the @var{ident} pointer when you are
-done. Please read the section on @code{openlog} for more information:
-@xref{openlog}.
-
-@code{closelog} does not flush any buffers. You do not have to call
-@code{closelog} before re-opening a Syslog connection with @code{openlog}.
-Syslog connections are automatically closed on exec or exit.
-
-@end deftypefun
-
-
-@node setlogmask
-@subsection setlogmask
-
-The symbols referred to in this section are declared in the file
-@file{syslog.h}.
-
-@comment syslog.h
-@comment BSD
-@deftypefun int setlogmask (int @var{mask})
-@safety{@prelim{}@mtunsafe{@mtasurace{:LogMask}}@asunsafe{}@acsafe{}}
-@c Read and modify are not guarded by syslog_lock, so concurrent changes
-@c or even uses are undefined. This should use an atomic swap instead,
-@c at least for modifications.
-
-@code{setlogmask} sets a mask (the ``logmask'') that determines which
-future @code{syslog} calls shall be ignored. If a program has not
-called @code{setlogmask}, @code{syslog} doesn't ignore any calls. You
-can use @code{setlogmask} to specify that messages of particular
-priorities shall be ignored in the future.
-
-A @code{setlogmask} call overrides any previous @code{setlogmask} call.
-
-Note that the logmask exists entirely independently of opening and
-closing of Syslog connections.
-
-Setting the logmask has a similar effect to, but is not the same as,
-configuring Syslog. The Syslog configuration may cause Syslog to
-discard certain messages it receives, but the logmask causes certain
-messages never to get submitted to Syslog in the first place.
-
-@var{mask} is a bit string with one bit corresponding to each of the
-possible message priorities. If the bit is on, @code{syslog} handles
-messages of that priority normally. If it is off, @code{syslog}
-discards messages of that priority. Use the message priority macros
-described in @ref{syslog; vsyslog} and the @code{LOG_MASK} to construct
-an appropriate @var{mask} value, as in this example:
-
-@smallexample
-LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR)
-@end smallexample
-
-or
-
-@smallexample
-~(LOG_MASK(LOG_INFO))
-@end smallexample
-
-There is also a @code{LOG_UPTO} macro, which generates a mask with the bits
-on for a certain priority and all priorities above it:
-
-@smallexample
-LOG_UPTO(LOG_ERROR)
-@end smallexample
-
-The unfortunate naming of the macro is due to the fact that internally,
-higher numbers are used for lower message priorities.
-
-@end deftypefun
-
-
-@node Syslog Example
-@subsection Syslog Example
-
-Here is an example of @code{openlog}, @code{syslog}, and @code{closelog}:
-
-This example sets the logmask so that debug and informational messages
-get discarded without ever reaching Syslog. So the second @code{syslog}
-in the example does nothing.
-
-@smallexample
-#include <syslog.h>
-
-setlogmask (LOG_UPTO (LOG_NOTICE));
-
-openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
-
-syslog (LOG_NOTICE, "Program started by User %d", getuid ());
-syslog (LOG_INFO, "A tree falls in a forest");
-
-closelog ();
-
-@end smallexample