SYSLOG - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
closelog,openlog,syslog,vsyslog-将消息发送到系统记录器
语法
#包括
void openlog(const char * ident,int选项,int工具);
void syslog(int优先级,const char * format,...);
void closelog(void);
void vsyslog(int优先级,const char * format,va_list ap);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
vsyslog():
从glibc 2.19开始:
_DEFAULT_SOURCE
Glibc 2.19及更早版本:
_BSD_SOURCE
说明
openlog()
openlog()打开与程序的系统记录器的连接。
ident指向的字符串在每个消息之前,通常设置为程序名称。如果ident为NULL,则使用程序名称。 (当ident为NULL时,POSIX.1-2008未指定行为。)
option参数指定用于控制openlog()和随后对syslog()的调用的标志。如果在后续对syslog()的调用中未指定任何内容,则设施参数将建立默认值。可能为选项和功能指定的值如下所述。
openlog()的使用是可选的;如有必要,它将由syslog()自动调用,在这种情况下,ident默认为NULL。
syslog() and vsyslog()
syslog()生成一条日志消息,该消息将由syslogd(8)分发。
优先级参数是通过将设施值和级别值(或以下所述)进行或运算而形成的。如果没有设施值被或运算为优先级,则使用由openlog()设置的默认值,或者,如果之前没有openlog()调用,则使用默认值LOG_USER。
其余参数是一种格式,如printf(3)所示,以及该格式所需的任何参数,除了两个字符的序列%m将被错误消息字符串strerror(errno)替换。格式字符串不必包含换行符。
vsyslog()函数执行与syslog()相同的任务,区别在于它采用了使用stdarg(3)变量参数列表宏获取的一组参数。
closelog()
closelog()关闭用于写入系统记录器的文件描述符。 closelog()的使用是可选的。
Values for option
openlog()的option参数是一个位掩码,是通过将以下任何值进行或运算而构造的:
- LOG_CONS
- 如果发送到系统记录器时出错,则直接写入系统控制台。
- LOG_NDELAY
- 立即打开连接(通常,在记录第一条消息时打开连接)。例如,如果后续的chroot(2)使日志记录工具内部使用的路径名不可访问,则这可能很有用。
- LOG_NOWAIT
- 不要等待记录消息时已创建的子进程。 (GNU C库不会创建子进程,因此此选项在Linux上无效。)
- LOG_ODELAY
- 与LOG_NDELAY相反;连接的打开被延迟,直到调用syslog()为止。 (这是默认设置,无需指定。)
- LOG_PERROR
- (不在POSIX.1-2001或POSIX.1-2008中。)还将消息记录到stderr。
- LOG_PID
- 在每条消息中都包括呼叫者的PID。
Values for facility
工具参数用于指定记录消息的程序类型。这使配置文件可以指定来自不同设施的消息将被不同地处理。
- LOG_AUTH
- 安全/授权消息
- LOG_AUTHPRIV
- 安全/授权消息(私人)
- LOG_CRON
- 时钟守护程序(cron和at)
- LOG_DAEMON
- 没有单独设施值的系统守护程序
- LOG_FTP
- ftp守护程序
- LOG_KERN
- 内核消息(无法从用户进程生成)
- LOG_LOCAL0through LOG_LOCAL7
- 保留供本地使用
- LOG_LPR
- 行式打印机子系统
- LOG_MAIL
- 邮件子系统
- LOG_NEWS
- USENET新闻子系统
- LOG_SYSLOG
- syslogd(8)内部生成的消息
- LOG_USER(default)
- 通用用户级消息
- LOG_UUCP
- UUCP子系统
Values for level
这确定了消息的重要性。这些级别按重要性从高到低的顺序为:
- LOG_EMERG
- 系统无法使用
- LOG_ALERT
- 必须立即采取行动
- LOG_CRIT
- 关键条件
- LOG_ERR
- 错误条件
- LOG_WARNING
- 警告条件
- LOG_NOTICE
- 正常但重要的状况
- LOG_INFO
- 信息性消息
- LOG_DEBUG
- 调试级消息
函数setlogmask(3)可用于仅将日志记录限制为指定级别。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
openlog(),closelog() | Thread safety | MT-Safe |
syslog(),vsyslog() | Thread safety | MT-Safe env locale |
遵循规范
在SUSv2,POSIX.1-2001和POSIX.1-2008中指定了函数openlog(),closelog()和syslog()(但不包括vsyslog())。
POSIX.1-2001仅为设施指定LOG_USER和LOG_LOCAL *值。但是,除LOG_AUTHPRIV和LOG_FTP之外,其他功能值出现在大多数UNIX系统上。
POSIX.1-2001或POSIX.1-2008未指定选项的LOG_PERROR值,但在大多数UNIX版本中可用。
备注
openlog()调用中的参数ident可能原样存储。因此,如果它所指向的字符串被更改,则syslog()可能会开始在更改后的字符串前添加前缀,并且如果它所指向的字符串不再存在,则结果是不确定的。最可移植的是使用字符串常量。
切勿以用户提供的数据作为格式传递字符串,而应使用以下内容:
syslog(priority, "%s", string);
另外参见
journalctl(1),logger(1),setlogmask(3),syslog.conf(5),syslogd(8)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。