int syslog(int type, char *bufp, int len);
                       /* No wrapper provided in glibc */

       /* The glibc interface */
       #include <sys/klog.h>

       int klogctl(int type, char *bufp, int len);

       If you need the C  library  function  syslog()  (which  talks  to  sys-
       logd(8)),  then  look  at  syslog(3).   The system call of this name is
       about controlling the kernel printk() buffer,  and  the  glibc  wrapper
       function is called klogctl().

   The kernel log buffer
       The  kernel has a cyclic buffer of length LOG_BUF_LEN in which messages
       given as arguments to the kernel function printk() are stored  (regard-
       less  of  their loglevel).  In early kernels, LOG_BUF_LEN had the value
       4096; from kernel 1.3.54, it was  8192;  from  kernel  2.1.113  it  was
       16384;  since  2.4.23/2.6  the  value  is a kernel configuration option
       (CONFIG_LOG_BUF_SHIFT).  In recent kernels the size can be queried with
       command type 10 (see below).

       The  type  argument  determines the action taken by this function.  The
       list below specifies the values  for  type.   The  symbolic  names  are
       defined  in  the kernel source, but are not exported to user space; you
       will either need to use the numbers, or define the names yourself.

              Close the log.  Currently a NOP.

              Open the log.  Currently a NOP.

              Read from the log.  The call waits until the kernel  log  buffer
              is  nonempty,  and  then reads at most len bytes into the buffer
              pointed to by bufp.  The call returns the number of bytes  read.
              Bytes  read  from  the  log  disappear  from the log buffer: the
              information can be read only once.  This is  the  function  exe-
              cuted by the kernel when a user program reads /proc/kmsg.

              Read  all messages remaining in the ring buffer, placing then in
              the buffer pointed to by bufp.  The  call  reads  the  last  len
              bytes  from the log buffer (nondestructively), but will not read
              more than was written into the buffer since the last "clear ring
              buffer"  command  (see  command 5 below)).  The call returns the
              number of bytes read.

              LOG_ACTION_READ_CLEAR).  This command has no effect on  commands

              Disable  printk to console.  The call sets the console log level
              to the minimum, so that no messages are printed to the  console.
              The bufp and len arguments are ignored.

              The call sets the console log level to the default, so that mes-
              sages are printed to the console.  The bufp  and  len  arguments
              are ignored.

              The  call  sets the console log level to the value given in len,
              which must be an integer between 1 and 8 (inclusive).   See  the
              loglevel section for details.  The bufp argument is ignored.

       SYSLOG_ACTION_SIZE_UNREAD (9) (since Linux 2.4.10)
              The  call  returns the number of bytes currently available to be
              read  from  the  kernel  log  buffer   via   command   2   (SYS-
              LOG_ACTION_READ).  The bufp and len arguments are ignored.

       SYSLOG_ACTION_SIZE_BUFFER (10) (since Linux 2.6.6)
              This  command  returns  the total size of the kernel log buffer.
              The bufp and len arguments are ignored.

       All commands except 3 and  10  require  privilege.   In  Linux  kernels
       before  2.6.37, command types 3 and 10 are allowed to unprivileged pro-
       cesses; since Linux 2.6.37, these commands are allowed to  unprivileged
       processes  only  if  /proc/sys/kernel/dmesg_restrict  has  the value 0.
       Before Linux  2.6.37,  "privileged"  means  that  the  caller  has  the
       CAP_SYS_ADMIN  capability.  Since Linux 2.6.37, "privileged" means that
       the caller has either the CAP_SYS_ADMIN capability (now deprecated  for
       this purpose) or the (new) CAP_SYSLOG capability.

   The loglevel
       The  kernel  routine printk() will only print a message on the console,
       if it has  a  loglevel  less  than  the  value  of  the  variable  con-
       sole_loglevel.   This  variable  initially  has  the value DEFAULT_CON-
       SOLE_LOGLEVEL (7), but is set to 10 if the kernel command line contains
       the  word  "debug",  and to 15 in case of a kernel fault (the 10 and 15
       are just silly, and equivalent to 8).  This variable is set (to a value
       in  the  range 1-8) by a syslog() call with a type of 8.  Calls to sys-
       log() with type equal to 6 or 7 set the variable to  1  (kernel  panics
       only) or 7 (all except debugging messages), respectively.

       Every  text  line  in  a  message  has its own loglevel.  This level is
       DEFAULT_MESSAGE_LOGLEVEL - 1 (6) unless the line starts with <d>  where
       d  is a digit in the range 1-7, in which case the level is d.  The con-
       ventional meaning of the loglevel is  defined  in  <linux/kernel.h>  as

       #define KERN_EMERG    "<0>"  /* system is unusable               */
       syslog() returns the total size of the kernel log  buffer.   For  other
       values of type, 0 is returned on success.

       In  case  of  error,  -1  is returned, and errno is set to indicate the

       EINVAL Bad arguments (e.g., bad type; or for type 2, 3, or  4,  buf  is
              NULL, or len is less than zero; or for type 8, the level is out-
              side the range 1 to 8).

       ENOSYS This syslog() system call is not available, because  the  kernel
              was  compiled with the CONFIG_PRINTK kernel-configuration option

       EPERM  An attempt was made to change console_loglevel or clear the ker-
              nel  message  ring buffer by a process without sufficient privi-
              lege (more precisely: without the  CAP_SYS_ADMIN  or  CAP_SYSLOG

              System  call  was  interrupted  by  a  signal; nothing was read.
              (This can be seen only during a trace.)

       This system call is Linux-specific and should not be used  in  programs
       intended to be portable.

       From  the  very start people noted that it is unfortunate that a system
       call and a library routine of the same name are entirely different ani-

       syslog(3), capabilities(7)

       This  page  is  part of release 3.54 of the Linux man-pages project.  A
       description of the project, and information about reporting  bugs,  can
       be found at http://www.kernel.org/doc/man-pages/.

Linux                             2012-11-29                         SYSLOG(2)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2019 Hurricane Electric. All Rights Reserved.