syslog、openlog、closelog 或 setlogmask 子例程

用途

控制系统日志。

标准 C 库 (libc.a)

语法

#include < syslog.h >

void openlog ( ID, LogOption, Facility) const char *ID; int LogOption, Facility

void syslog ( Priority , ... ) int 优先级; const char *Value;

void closelog ()

int setlogmask( MaskPriority) int MaskPriority

void bsdlog (Priority Value ,...) int 优先级; const char *Value;

描述

注意: 请勿在多线程环境中使用 syslogopenlogcloselog setlogmask 子例程。 请参阅 syslog_r (syslog_r , openlog_r , closelog_r 或 setlogmask_r 子例程) , openlog_rcloselog_r中的多线程替代方法。 或 setlogmask_r 子例程文章。 syslog 子例程不是线程安全的; 对于线程安全程序,应该改为使用 syslog_r 子例程。

syslog 子例程将消息写入由 syslogd 命令维护的系统日志。

注: 在记录之前, syslogd 可能会截断传递到 syslog 的长度超过 900 字节的消息。

此消息类似于 printf fmt 字符串,但 %m 被替换为从 errno 全局变量获取的当前错误消息。 如果需要,可以将尾部换行符添加到消息中。

消息由 syslogd 命令读取并写入系统控制台或日志文件,或转发到相应主机上的 syslogd 命令。

如果需要特殊处理,那么可以使用 openlog 子例程来初始化日志文件。

使用指示每个消息的 优先级 类型的代码对这些消息进行标记。 优先级 编码为 设施,用于描述生成消息的系统部分,并作为指示消息严重性的级别。

如果 syslog 子例程无法将消息传递到 syslogd 命令,那么它会将消息写入 /dev/console 文件。 已设置 LOG_CONS 选项。

closelog 子例程关闭日志文件。

setlogmask 子例程使用 MaskPriority 参数中的位掩码来设置新的日志优先级掩码并返回先前的掩码。

sys/syslog.h 文件中的 LOG_MASKLOG_UPTO 宏用于创建优先级掩码。 使用不允许记录该特定级别消息的优先级掩码调用 syslog 子例程会导致子例程返回而不记录消息。

参数

描述
标识 包含附加到每条消息开头的字符串。 Facility 参数对先前列表中的缺省设施进行编码,以分配给未进行显式设施编码的消息。
LogOption 指定指示日志记录选项的位字段。 LogOption 的值为:
日志_CONS
如果无法将消息发送到 syslogd 命令,那么将消息发送到控制台。 此选项在没有控制终端的守护进程中很有用。
日志延迟
立即打开与 syslogd 命令的连接,而不是在记录第一条消息时打开。 此选项对于需要管理文件描述符分配顺序的程序很有用。
日志_NOWAIT
将消息记录到控制台,而不等待派生的子代。 将此选项用于通过 SIGCHLD启用子终止通知的进程; 否则, syslog 子例程可能会阻塞,等待已收集其退出状态的子进程。
日志延迟
延迟打开,直到调用 syslog 子例程。
LOG_PID
记录每条消息的进程标识。 此选项对于标识守护程序很有用。
程序 指定以下哪些值生成了消息:
登录
指示安全授权系统: login 命令, su 命令等。
LOG_DAEMON
记录系统守护程序。
日志_KERN
记录内核生成的消息。 内核进程应使用 bsdlog 例程来生成 syslog 消息。 bsdlog 的语法与 syslog相同。 bsdlog 消息只能由内核进程创建,并且必须具有 LOG_KERN 优先级。 syslog 子例程无法记录 LOG_KERN 设施消息。 而是记录 LOG_USER 工具消息。
LOG_LPR
记录行式打印机假脱机系统。
LOG_LOCAL0LOG_LOCAL7
保留供本地使用。
日志邮件
记录邮件系统。
日志_新闻
记录新闻子系统。
LOG_UUUCP
记录 UUCP 子系统。
用户日志
记录用户进程生成的消息。 当未指定任何值时,这是缺省工具。
Priority 指定生成消息的系统部分,作为级别,指示消息的严重性。 从以下列表中选择严重性级别:
日志警报
指示应立即更正的条件; 例如,损坏的数据库。
LOG_CRIT
指示临界条件; 例如,硬设备错误。
LOG_DEBUG
显示包含对调试程序有用的信息的消息。
LOG_EMERG
指示向所有用户报告的紧急情况; 系统不可用。
LOG_ERR
指示的错误情况。
日志信息
指示常规参考消息。
日志通知
指示需要特殊处理的条件,但不指示错误条件。
日志警告
记录警告消息。
MaskPriority 对掩码中的位指示的级别启用日志记录,这些位是在未设置位的情况下设置和禁用的。 缺省掩码允许记录所有优先级。
VALUE 指定 Value 参数中给定的值,并遵循与 printf 子例程 Format 参数相同的语法。

示例

  1. 要记录有关可能的安全违规的错误消息,例如以下内容,请输入:
    syslog (LOG_ALERT, "who:internal error 23");
     
  2. 要初始化日志文件,设置日志优先级掩码并记录错误消息,请输入:
    openlog ("ftpd", LOG_PID, LOG_DAEMON);
    setlogmask (LOG_UPTO (LOG_ERR));
    syslog (LOG_INFO, ""); 
     
  3. 要记录来自系统的错误消息,请输入:
    syslog (LOG_INFO | LOG_LOCAL2, "foobar error: %m");