void openlog(const char* ident, int option, int facility);
ident用来指定每条日志记录的前缀,通常设置为程序名称,如果为NULL,则使用程序名称作为前缀option指定openlog()对syslog()调用的标志,如果未指定则使用默认值facility用于指定产生消息的程序类型。从而根据配置文件的设定将来自不同程序类型的消息将以不同的方式处理option 值是一个位掩码,可有以下值进行或运算进行组合使用
| 项目 | 描述 |
|---|---|
| LOG_CONS | 如果在写入到系统log时出现错误,则直接写入系统控制台 |
| LOG_NDELAY | 立即打开连接(通常,在产生第一条消息时打开连接)。这会很有用,例如,如果后续调用 chroot() 会使日志工具内部使用的路径名无法访问。 |
| LOG_NOWAIT | 不等待在写入消息时可能已创建的子进程。(GNU C 库不创建子进程,所以这个选项对 Linux 没有影响) |
| LOG_ODELAY | 连接的打开被延迟到 syslog() 被调用(这是默认值,无需指定) |
| LOG_PERROR | (不在 POSIX.1-2001 或 POSIX.1-2008 中)还将消息记录到 stderr |
| LOG_PID | 每条消息中包含调用者的 PID |
facility
| 项目 | 描述 |
|---|---|
| LOG_AUTH | 安全/授权消息 |
| LOG_AUTHPRIV | 安全/授权消息(私有) |
| LOG_CRON | 时钟守护进程(cron 和 at) |
| LOG_DAEMON | 没有单独设备值的系统守护进程 |
| LOG_FTP | ftp 守护进程 |
| LOG_KERN | 内核消息(不能从用户进程生成) |
| LOG_LOCAL0 ~ LOG_LOCAL7 | 保留供本地使用 |
| LOG_LPR | 行打印子系统 |
| LOG_MAIL | 邮件子系统 |
| LOG_NEWS | USENET新闻子系统 |
| LOG_SYSLOG | 由 syslogd内部生成的消息 |
| LOG_USER | 通用用户级消息 |
| LOG_UUCP | UUCP(Unix-to-Unix Copy) subsystem |
void syslog(int priority, const char* format, ...);
void vsyslog(int priority, const char *format, va_list ap);
priority 参数是将 facility 和 level 组合在一起形成的。如果 facility 没有设置则使用openlog()设置的值,若openlog()没有被调用,则使用默认值 LOG_USERvsyslog() 执行与 syslog() 相同的任务,不同之处在于它采用一组使用 stdarg() 变量参数列表宏获得参数。void closelog(void)
函数声明如下:
int setlogmask(int mask);
函数介绍
syslog()的调用可以被记录。其他的调用将被忽略,初始掩码是为所有优先级启用日志记录。setlogmask() 函数为调用进程设置此日志掩码,并返回前一个掩码。 如果掩码参数为 0,则不会修改当前日志掩码。level的值)参数之详细介绍
level 值,下列按照消息的重要性降序排列
| 项目 | 描述 |
|---|---|
| LOG_EMERG | 系统无法使用 |
| LOG_ALERT | 必须立即采取行动 |
| LOG_CRIT | 临界条件 |
| LOG_ERR | 错误条件 |
| LOG_WARNING | 警告条件 |
| LOG_NOTICE | 正常但重要的情况 |
| LOG_INFO | 信息性消息 |
| LOG_DEBUG | 调试级消息 |
rsyslogd的一些环境配置 #include
#include
int main(){
// 打开log文件, 第三个参数设置位0,以便在syslog()更灵活设置,避免反复设置
openlog("tetslog",LOG_CONS | LOG_PID, 0);
// 产生log信息
syslog(LOG_USER | LOG_DEBUG,"test log %s %d",__FILE__,__LINE__);
// 关闭
closelog();
return 0;
}
由于 openlog() 和 closelog() 均为可选函数,所以可精简至一行
#include
#include
int main(){
// 产生log信息
syslog(LOG_USER | LOG_DEBUG,"test log %s %d",__FILE__,__LINE__);
return 0;
}