syslog日志介绍

syslog日志介绍

要使用syslog日志前,我们必须回答下面这个问题:

  1. syslog日志和我们自己定义一个日志文件,并向其写日志有何区别?
    1. 回答:syslog是面向管理员、面向整个系统的。一般syslog监控的是整个系统的状态,而我们自定义的日志一般只面向我们使用的进程。如果使用自定义日志文件,可以选择开源的easyloger日志库)。
  2. 为什么要使用linux自带的log日志?
    1. 回答:为了维护方便,我们使用日志输出时,需要有输出级别控制、输出信息定位字段选择(如时间、函数)等功能。syslog库已经封装好了这些功能。使用方便。
  3. syslog库有何优点?
    1. 回答:syslog日志消息既可以打印在控制台、记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见应用场景是网络管理工具、安全管理系统、日志审计系统。

syslog日志用户空间接口详解:

  1. 一般的日志输出接口都包含下面四个部分:
    1. 输出级别:英文术语一般为level,syslog中叫prioritiy.用于控制输出哪些等级的日志。比如我们在调试阶段通常会打印所有的信息,而在运行时只打印告警以上的信息。就可以通过控制输出级别来实现。下面是syslog的输出级别:
      1. LOG_EMERG:系统不可用(断言)
      2. LOG_ALERT:需要立即采取动作
      3. LOG_CRIT:临界状态
      4. LOG_ERR:错误
      5. LOG_WARNING:警告
      6. LOG_NOTICE:正常但需要注意
      7. LOG_INFO:正常信息
      8. LOG_DEBUG:调试信息
    2. 谁输出的(英文术语为facility)。如这条信息是由哪种类型的进程打印的。syslog分为如下几种类别:
      1. LOG_KERN:内核消息
      2. LOG_USER:用户进程消息
      3. LOG_MAIL:邮箱系统相关
      4. LOG_DAEMON:守护进程相关
      5. LOG_AUTH:用户授权
      6. LOG_SYSLOG:由syslogd在内部生成的消息
      7. LOG_LPR:与打印有关的信息
      8. LOG_NEWS:来自新闻服务器的信息
      9. LOG_UUCP:由uucp生成的信息。
      10. LOG_CRON:时钟守护进程
      11. LOG_AUTHPRIV:授权和安全
      12. LOG_FTP:ftp消息。
      13. LOG_LOCAL0~LOG_LOCAL7:本地用户消息
    3. 输出信息中包含哪些字段,如时间、进程PID、文件名、函数名等。这个部分主要是为了方便用户查找打印信息的位置。
    4. 用户信息:用户要输出的打印信息。

下面是syslog用户空间的接口函数。使用时需要包含syslog.h头文件。

  1. void openlog(const char *ident, int option, int facility)
    1. 描述:打开或者重新打开一个日志连接。
    2. ident:是一个任意的标识字符串.会添加到日志信息的前面。用于区分各个进程的打印信息。如果为NULL,系统会默认使用进程名(即,argv[0]字符串).注意,ident指向的字符串必须为全局有效。
    3. option:可以是下面选项的组合:
      1. LOG_PID:在日志信息中包含进程标识符,这是系统分配给每个进程的一个唯一值.
      2. LOG_CONS:如果信息不能被记录到日志文件中,就把它们发送到控制台.
      3. LOG_ODELAY:在第一次调用syslog时才打开日志功能.
      4. LOG_NDELAY:立即打开日志功能,而不是等到第一次记录日志时.
      5. LOG_PERROR:同时打印到stderr。
    4. facility:见上面讲到的谁输出的部分。
  2. void syslog(int priority, const char *format, ...)
    1. 描述:用来打印用户想输出的日志信息。
    2. priority:要输出的日志级别。
    3. 其他使用跟printf()一致。
  3. void closelog(void)
    1. 描述:关闭当前打开的日志连接。
  4. int setlogmask(int mask)
    1. 描述:用来设置日志输出的级别。
    2. mask:一般使用下面两个宏来进行设置。如果mask为0,则不修改优先级别。
      1. LOG_MASK(pri):屏蔽某个级别。
      2. LOG_UPTO(pri):屏蔽某个级别以下的所有日志显示。
      3. 其中参数pri为上面提到的优先级别。
    3. return:返回先前的优先级别。

当然,我们在使用时也可以不调用openlog()函数打开日志连接。而直接使用syslog().此时系统会自动先打开日志连接。(此时的ident为进程名,option为无,facility为LOG_USER))。

下面是一个简单的使用例程。

#include <syslog.h>
#include <stdio.h>

void main(void)
{
    openlog("theboymoName", LOG_PID | LOG_PERROR,LOG_USER);
    
    //setlogmask(LOG_MASK(LOG_ERR));//此时只打印LOG_ERR等级信息
    setlogmask(LOG_UPTO(LOG_INFO));//此时只打印>=LOG_INFO等级信息

    syslog(LOG_DEBUG,"this is DEBUG log");
    syslog(LOG_INFO,"this is INFO log");
    syslog(LOG_ERR,"this is ERR log");

    closelog();
}
/* 使用setlogmask(LOG_MASK(LOG_ERR))输出结果为:
 * theboymoName[214]: this is ERR log
 * 使用setlogmask(LOG_UPTO(LOG_INFO))输出结果为:
 * theboymoName[220]: this is INFO log
 * theboymoName[220]: this is ERR log
 */

syslog客户端配置与使用

上面介绍的是linux系统日志用户空间的标准接口函数以及函数的使用。但是我们的日志输出到哪去了?好像不知道。下面的内容会涉及到这些。

linux通过守护进程rsyslogdsyslogd处理我们的日志消息(比如将消息发送到其他主机等)。rsyslogdsyslogd的升级版。目前很多Linux发行版已经用rsyslogd代替了syslogd。但二者的在配置上大同小异。下面按照rsyslogd的配置介绍。配置涉及到的两个文件为

  1. /etc/rsyslog.conf:它里面指定了调用/etc/rsyslog.d/目录下的所有配置文件。一般不需要我们修改。我们一般在/etc/rsyslog.d/添加我们自己的配置文件,或者修改50-default.conf文件。
  2. /etc/rsyslog.d/50-default.conf:此配置文件用于修改我们日志输出的路径及文件。关于文件配置的详细语法使用man 5 rsyslog.conf查看。下面只简单介绍配置为输出到具体文件:
# 此处用来设置输出到具体文件中,
# 语法格式为: facility.prioritiy filePathName
# 注意:filePathName必须存在,权限必须满足。
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

上面配置的语法格式为facility.prioritiy filePathName.其中facility,prioritiy的具体值请参看上面讲解。配置的文件路径名必须存在,且权限必须满足。

修改完配置后需要重新启动守护进程。涉及到如下命令:

  1. sudo service rsyslog start
  2. sudo service rsyslog restart
  3. sudo service rsyslog stop

查看syslog日志相关的命令和文件

  1. 内核日志的查看:
    1. dmesg命令:日志会写到kernel ring buffer(环型缓冲区)中,dmesg是从环缓冲区中读取内核日志信息。
    2. /proc/kmsg:通过读取/proc/kmsg也可以得到环型缓冲区的日志,但是对其读操作后,环型缓冲区中被读取的数据将被清空。如果启用了rsyslogd服务,则不能读取/proc/kmsg文件(文件为空),同一时间只能用一种方法来获取日志文件。(网上找的,笔者没有找到这个文件).
  2. 通过配置好的日志文件查看。如cat /var/log/user.log.
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theboynoName

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值