man手冊
命令行man openlog
即可查看;寫的非常詳細,看完其實就懂了。
NAME
? ? ? ?closelog, openlog, syslog, vsyslog - send messages to the system loggerSYNOPSIS
? ? ? ?#include <syslog.h>? ? ? ?void openlog(const char *ident, int option, int facility);
? ? ? ?void syslog(int priority, const char *format, ...);
? ? ? ?void closelog(void);? ? ? ?void vsyslog(int priority, const char *format, va_list ap);
? ?Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
? ? ? ?vsyslog():
? ? ? ? ? ?Since glibc 2.19:
? ? ? ? ? ? ? ?_DEFAULT_SOURCE
? ? ? ? ? ?Glibc 2.19 and earlier:
? ? ? ? ? ? ? ?_BSD_SOURCEDESCRIPTION
? ?openlog()
? ? ? ?openlog() opens a connection to the system logger for a program.? ? ? ?The ?string ?pointed ?to by ident is prepended to every message, and is
? ? ? ?typically set to the program name. ?If ident is NULL, the program ?name
? ? ? ?is ?used. ? (POSIX.1-2008 ?does ?not specify the behavior when ident is
? ? ? ?NULL.)? ? ? ?The option argument specifies flags ?which ?control ?the ?operation ?of
? ? ? ?openlog() ?and ?subsequent ?calls ?to ?syslog(). ?The facility argument
? ? ? ?establishes a default to be used if none ?is ?specified ?in ?subsequent
? ? ? ?calls ?to ?syslog(). ? The ?values that may be specified for option and
? ? ? ?facility are described below.? ? ? ?The use of openlog() is optional; it will automatically ?be ?called ?by
? ? ? ?syslog() if necessary, in which case ident will default to NULL.? ?syslog() and vsyslog()
? ? ? ?syslog() ?generates ?a ?log ?message, which will be distributed by sys‐
? ? ? ?logd(8).? ? ? ?The priority argument is formed by ORing together a facility value ?and
? ? ? ?a ?level ?value ?(described ?below). ?If no facility value is ORed into
? ? ? ?priority, then the default value set by openlog() is used, or, if there
? ? ? ?was no preceding openlog() call, a default of LOG_USER is employed.? ? ? ?The ?remaining ?arguments ?are a format, as in printf(3), and any argu‐
? ? ? ?ments required by the format, except that the two-character sequence %m
? ? ? ?will be replaced by the error message string strerror(errno). ?The for‐
? ? ? ?mat string need not include a terminating newline character.? ? ? ?The function vsyslog() performs the same task as syslog() with the dif‐
? ? ? ?ference that it takes a set of arguments which have been obtained using
? ? ? ?the stdarg(3) variable argument list macros.? ?closelog()
? ? ? ?closelog() closes the file descriptor being used to write to the system
? ? ? ?logger. ?The use of closelog() is optional.
? ?Values for option
? ? ? ?The ?option ?argument ?to ?openlog() is a bit mask constructed by ORing
? ? ? ?together any of the following values:? ? ? ?LOG_CONS ? ? ? Write directly to the system ?console ?if ?there ?is ?an
? ? ? ? ? ? ? ? ? ? ? error while sending to the system logger.? ? ? ?LOG_NDELAY ? ? Open ?the ?connection immediately (normally, the connec‐
? ? ? ? ? ? ? ? ? ? ? tion is opened when the first message is logged). ? This
? ? ? ? ? ? ? ? ? ? ? may ?be ?useful, ?for example, if a subsequent chroot(2)
? ? ? ? ? ? ? ? ? ? ? would make the pathname used internally by ?the ?logging
? ? ? ? ? ? ? ? ? ? ? facility unreachable.? ? ? ?LOG_NOWAIT ? ? Do not ?wait ?for child processes that may have been cre‐
? ? ? ? ? ? ? ? ? ? ? ated while logging the message. ?(The GNU C library does
? ? ? ? ? ? ? ? ? ? ? not create a child process, so this option has no effect
? ? ? ? ? ? ? ? ? ? ? on Linux.)? ? ? ?LOG_ODELAY ? ? The converse of LOG_NDELAY; opening of the connection is
? ? ? ? ? ? ? ? ? ? ? delayed until syslog() is called. ?(This is the default,
? ? ? ? ? ? ? ? ? ? ? and need not be specified.)? ? ? ?LOG_PERROR ? ? (Not in POSIX.1-2001 or ?POSIX.1-2008.) ? Also ?log ?the
? ? ? ? ? ? ? ? ? ? ? message to stderr.? ? ? ?LOG_PID ? ? ? ?Include the caller s PID with each message.
? ?Values for facility
? ? ? ?The ?facility ?argument is used to specify what type of program is log‐
? ? ? ?ging the message. ?This lets the configuration file specify ?that ?mes‐
? ? ? ?sages from different facilities will be handled differently.? ? ? ?LOG_AUTH ? ? ? security/authorization messages
? ? ? ?LOG_AUTHPRIV ? security/authorization messages (private)
? ? ? ?LOG_CRON ? ? ? clock daemon (cron and at)
? ? ? ?LOG_DAEMON ? ? system daemons without separate facility value
? ? ? ?LOG_FTP ? ? ? ?ftp daemon
? ? ? ?LOG_KERN ? ? ? kernel messages (these can't be generated from user pro‐
? ? ? ? ? ? ? ? ? ? ? cesses)? ? ? ?LOG_LOCAL0 through LOG_LOCAL7
? ? ? ? ? ? ? ? ? ? ? reserved for local use? ? ? ?LOG_LPR ? ? ? ?line printer subsystem
? ? ? ?LOG_MAIL ? ? ? mail subsystem
? ? ? ?LOG_NEWS ? ? ? USENET news subsystem
? ? ? ?LOG_SYSLOG ? ? messages generated internally by syslogd(8)
? ? ? ?LOG_USER (default)
? ? ? ? ? ? ? ? ? ? ? generic user-level messages? ? ? ?LOG_UUCP ? ? ? UUCP subsystem
Values for level
? ? ? ?This determines the importance of the ?message. ? The ?levels ?are, ?in
? ? ? ?order of decreasing importance:? ? ? ?LOG_EMERG ? ? ?system is unusable
? ? ? ?LOG_ALERT ? ? ?action must be taken immediately
? ? ? ?LOG_CRIT ? ? ? critical conditions
? ? ? ?LOG_ERR ? ? ? ?error conditions
? ? ? ?LOG_WARNING ? ?warning conditions
? ? ? ?LOG_NOTICE ? ? normal, but significant, condition
? ? ? ?LOG_INFO ? ? ? informational message
? ? ? ?LOG_DEBUG ? ? ?debug-level message
? ? ? ?The function setlogmask(3) can be used to restrict logging to specified
? ? ? ?levels only.
示例
#include <unistd.h>
#include <iostream>
#include <syslog.h>
using namespace std;
int main(int argc, char const *argv[])
{
? ? openlog("writenbycwd",LOG_PID,LOG_USER);
? ? syslog(LOG_INFO, "my syslog OK");
? ? closelog();
? ? return 0;
}
?
效果
需注意,要在sudo下運行,因為寫入log的權限可能不夠。
查看文件/var/log/syslog
cwd@cwd:~$ cd /var/log
cwd@cwd:/var/log$ grep "writenbycwd" syslog
Mar? 1?09:20:57 cwd writenbycwd[4446]: my syslog OK
Mar? 1?09:21:56 cwd writenbycwd[4561]: my syslog OK
Mar? 1?09:28:11 cwd writenbycwd[4821]: my syslog OK