
三个函数openlog和syslog. closelog是一组系统日志写入接口. 此外,vsyslog的功能与syslog的功能相同,只是参数格式不同.
通常. syslog守护程序以三种格式读取记录的消息.
此守护程序在启动时读取配置文件. 通常,文件名是/etc/syslog.conf,它确定应将不同类型的消息发送到何处. 如. 紧急消息可以发送给系统管理员(如果已登录)并显示在控制台上. 警告消息可以记录在文件中.
此机制提供syslog功能. 调用格式如下
#include <syslog.h>
void openlog (char*ident,int option ,int facility);
void syslog(int priority,char*format,……)
void closelog();
调用openlog是可选的.
假设未调用openlog,则第一次调用syslog时,它将主动调用openlog. 调用closelog也是可选的,它只是关闭用于与syslog守护程序通信的描述性描述符. 调用openlog允许我们指定一个标识. 将来,此标识将添加到每个记录的消息中. ident通常是程序的名称(例如cron,ine等)
#include <syslog.h>
int main(int argc, char **argv)
{
openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);
syslog(LOG_DEBUG,
"This is a syslog test message generated by program ‘%s‘\n",
argv[0]);
closelog();
return0;
}
编译并生成可运行程序后,运行该程序一次将在/ var / log / message文件中添加一行信息,例如:
Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog testmessage generated by program ‘./a.out‘
此函数的原型如下:
void openlog(const char * ident,int选项,int工具);
此功能用于打开与系统日志记录程序的连接. 打开后,可以使用syslog或vsyslog函数将信息添加到系统日志中. closelog函数用于关闭连接.
第一个参数ident将是一个标记,并且ident表示的字符串将固定地添加到日志的每一行的前面,以标识该日志. 通常写为当前标记程序的名称.
第二个参数选项是采用和计算以下值的结果: LOG_CONS,LOG_NDELAY,LOG_NOWAIT. LOG_ODELAY,LOG_PERROR,LOG_PID,每个值的含义请参考man openlog手册:
LOG_CONS
如果发送到系统记录器时出错,则直接写到系统控制台.
LOG_NDELAY
立即打开连接(通常,在记录第一条消息时打开连接).
LOG_NOWAIT
不要等待记录消息时可能已经创建的子进程. (GNU C库不会创建子进程,因此此选项对Linux没有影响. )
LOG_ODELAY
LOG_NDELAY的反义词;连接的打开被延迟,直到调用syslog()为止. (这是默认设置,无需指定. )
LOG_PERROR

(Notin SUSv3. )也打印到stderr.
LOG_PID
每封邮件都包含PID.
第三个参数表示记录程序的类型.
facility参数用于指定记录消息的程序类型.
这允许配置文件指定来自不同设施的消息将被
处理方式不同.
LOG_AUTH安全/授权消息(不建议使用LOG_AUTHPRIV代替)
LOG_AUTHPRIV安全性/授权消息(私有)
LOG_CRON时钟守护程序(cron和at)
没有单独设施值的LOG_DAEMON系统守护程序
LOG_FTP ftp守护程序
LOG_KERN内核消息(这些消息不能来自用户进程)
LOG_LOCAL0到LOG_LOCAL7
保留供本地使用
LOG_LPR行式打印机子系统
LOG_MAIL邮件子系统
LOG_NEWS USENET新闻子系统
syslogd(8)内部生成的LOG_SYSLOG消息
LOG_USER(默认)
通用用户级消息
LOG_UUCP UUCP子系统
syslog函数用于将日志消息发送到系统程序syslogd进行记录. 此函数的原型是:
void syslog(int优先级,const char * format,...);

第一个参数是邮件的紧急程度
第二个参数是消息的格式,其后是格式对应的参数. 就像printf函数一样使用.
假定我们的程序使用系统日志功能,则仅需要在程序启动时使用openlog函数连接到syslogd程序. 以后随时可以使用syslog功能写入日志.
级别
这确定消息的重要性. 级别按降序排列
重要性:
LOG_EMERG系统不可用
必须立即采取LOG_ALERT操作
LOG_CRIT关键条件
LOG_ERR错误条件
LOG_WARNING警告条件
LOG_NOTICE正常但重要的状况
LOG_INFO参考消息
LOG_DEBUG调试级消息
setlogmask(3)函数只能用于将日志记录限制为指定级别.
注意
openlog()调用中的参数ident可能原样存储. 因此,如果
它指向的字符串已更改,syslog()可能会开始在更改后的字符串前加上
它指向的字符串不复存在,结果不确定. 最便携的是
使用字符串常量.
永远不要以用户提供的数据作为格式传递字符串,而是使用以下内容:
syslog(优先级,“%s”,字符串);
另请参见
logger(1),setlogmask(3)linux系统启动日志,syslog.conf(5),syslogd(8)

*********************************************** ****************************************************** ******************************************************
对于不同类型的Unix,除了某些关键字外,标准UnixLog系统的设置实际上与系统syslog.conf格式相同.
syslog采用可配置和统一的系统注册过程,随时接受来自系统所有部分的日志请求,然后根据/etc/syslog.conf中的预设将日志信息写入相应的文件中并通过邮件发送特定用户或通过消息直接发送到控制台.
值得注意的是,为了防止入侵者更改和删除消息中记录的信息,可以使用打印机记录或方法来阻止入侵者的尝试.
您可以参考man [5] syslog.conf.
这是syslog.conf的简介.
/etc/syslog.conf文件中的配置记录由两部分组成: “选择器”和“动作”,由选项卡制表符分隔(它们之间的空间无效).
“选项”由一个或多个保留字段组成,格式为“ type.level”. 用分号分隔每个保留字段. 例如,您在以下行中看到的内容:
类型. 级别[;类型. 级别]的“ TAB”操作
保留字段中的“类型”代表信息的来源linux系统启动日志,可以是:
身份验证系统,要求输入用户名和密码
cron系统计时系统在运行计时任务时发送的信息
某些系统守护程序的守护程序syslog,例如in.ftpd生成的日志
内核内核的syslog信息
lpr打印机的系统日志信息
邮件系统的syslog信息
标记时间标记程序,用于定期发送消息
新闻新闻系统的syslog信息
本地用户应用程序的用户syslog信息
uucp uucp子系统的系统日志信息
local0 .. 7种本地类型的系统日志信息,可由用户再次定义
*代表以上各种设备
保留字段中的“级别”代表信息的重要性,可以是:
紧急是紧急的. 处于恐慌状态.

通常向所有用户广播;
警告,必须立即更正当前状态. 如. 系统崩溃了.
严重临界状态警告. 如. 硬件故障;
犯其他错误;
警告警告.
通知;报告为非错误状态,但应进行特殊处理.
信息通知信息;
调试程序时调试信息.
在调试程序时通常不使用它,这表示不需要发送无级别类型的信息.
例如* .debug; mail.none表示除邮件信息外的所有信息都是在调试过程中发送的.
“操作”字段指示消息的目的地. 可以是:
/文件名日志文件.
绝对路径指示的文件名. 该文档必须事先创建;
@host远程主机; @符号后可以跟IP或域名. 默认情况下,已在/ etc / hosts文件中将loghost的别名分配给该计算机.
user1,user2指定用户. 假设指定的用户已登录. 那么他们将收到消息;
*所有用户.
所有登录的用户都将收到消息.
让我们看一下/etc/syslog.conf文件中的示例:
......
*. err; kern.debug; daemon.notice; mail.crit [TAB] / var / adm / messages
......
此行中的“操作”是我们经常关心的/ var / adm / messages文件. 向其输出的信息源“选择器”是:
*. err-所有常规错误消息.
kern.debug调试信息,由内核生成;
daemon.notice-守护程序的注意信息.
mail.crit-邮件系统按键警告消息
— —以上所有内容均来自互联网
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-262462-1.html
也绝不会再让国人蒙羞的
捍卫自己的主权
说明人家还是看不起我们
我不犯人