Linux编程时日志文件的记录

1 日志文件的记录

许多应用程序需要记录它们的活动,系统程序需要向控制台或日志文件写消息,这些消息可能记录网络、调试或内核的有关信息。比如su程序会把某个用户尝试获取root权限但失败的消息记录下来。
UNIX规范通过syslog函数为所有应用程序产生日志消息提供了统一的接口。
在本机日志消息目录在/var/log/syslog文件中

#include <syslog.h>
void syslog(int priority,const char* message,arguments...);

syslog函数向系统的日志设施发送一条信息,priority参数是严重级别与设施值的按位或。严重级别控制日志信息的处理方式,设施值记录日志信息的来源。
设施值包括LOG_USER(默认值),指出消息来自于一个用户程序,以及LOG_LOCAL0到LOG_LOCAL7,这由本地管理员指定。
严重级别如下所示,根据系统配置,LOG_EMERG信息可能会广播给所有用户。
message和arguments参数控制日志信息,日志信息包括消息头消息体消息头根据设施值及日期和时间创建,消息体根据message和arguments参数创建,类似于printf,此外转换控制符%m可用于插入与错误变量errno当前值对应的出错消息字符串。
在这里插入图片描述

#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
	FILE* f;
	f = fopen("not_here","r");
	if(!f)
		syslog(LOG_ERR | LOG_USER,"oops - %m\n");
	exit(0);
}

在这里插入图片描述

#include <syslog.h>
void closelog();
void openlog(const char* ident,int logopt,int facility);
int setlogmask(int maskpri);

openlog函数可以用来改变日志信息的表示方式,字符串ident被添加在日志信息前面,我们可以用它来指明哪个程序创建了这条消息。facility参数设置一个被后续syslog调用的默认设施值,其默认值为LOG_USER,logopt参数对后续syslog调用的行为进行配置。
在这里插入图片描述
openlog函数会分配一个文件描述符,closelog函数用来关闭它。
setlogmask函数用来设置一个日志掩码,用它来控制日志信息的优先级,优先级未在日志掩码中置位的后续syslog调用都被丢弃。有两个宏用来便于操作,LOG_MASK(priority)创建一个只包含一个优先级的掩码,LOG_UPTO(priority)来创建一个在指定优先级上的所有优先级构成的掩码。
#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
openlog(“dwpppp”,LOG_PID | LOG_CONS,LOG_USER);
syslog(LOG_INFO,“informative message,pid = %d”,getpid());
syslog(LOG_DEBUG,“debug message,should appear\n”);
setlogmask(LOG_UPTO(LOG_NOTICE));
syslog(LOG_DEBUG,“debug message,should not appear\n”);
exit(0);
}
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值