syslog总结

参考连接:
http://zhouyang340.blog.163.com/blog/static/302409592012729102343362/
http://blog.csdn.net/qpwyj/article/details/40382271
http://blog.csdn.net/balderfan/article/details/7571724
https://linux.die.net/man/5/syslog.conf


  1. syslog是 Unix 系统的一个常见组件,用于执行系统日志记录活动。
  2. syslogd 是它的守护进程,syslogd 从一组日志源(如 /dev/log 和 /dev/klog )中读取数据,并按照 /etc/syslog.conf 中的说明处理这些日志消息。通过调用syslog(),可将应用程序日志消息记录到 syslog 中。syslog 消息采用一种包含可选优先级和设备的标准格式。优先级指示消息的紧急程度,设备指示发布消息的子系统。/usr/include/syslog.h中定义了它的优先级和设备资源。
  3. klog是一个从Unix内核接受消息的设备,klogd 守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd 传来的所有内核信息。

这里写图片描述

下文涉及的知识主要包括:
  1. syslogd进程的配置文件/etc/syslog.conf
  2. printk()
  3. syslog编程接口
  4. logger程序
  5. 日志滚动

1、/etc/syslog.conf

This file specifies rules for logging, every rule consists of two fields, a selector field and an action field. These two fields are separated by one or more spaces or tabs.

Selector

The selector field specifies a pattern of facilities and priorities belonging to the specified action. 

The selector field itself again consists of two parts, a facility and apriority,separated by a period.

Action

The action field of a rule describes the abstract term ''logfile''. A ''logfile'' need not to be a real file, btw.
可能的值:
  • Regular File,-表示不实时同步
  • Named Pipes
  • Terminal and Console
  • Remote Machine
  • List of Users, * 表示所有登陆用户

Examples

    # Kernel messages are first, stored in the kernel file
     kern.* /var/adm/kernel
    # critical messages and higher ones also go to another host and to the console
     kern.crit @finlandia
     kern.crit /dev/console

2、printk

printk相当于printf的孪生姐妹,她们一个运行在用户态,另一个则在内核态被人们所熟知。

2.1 printk和printf有一个不同的地方,使用这个函数不一定会将内容显示到终端上,但是一定在内核缓冲区里。

2.2 使用printk时内核会根据日志级别,可能把消息打印到当前控制台上(这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机),这些消息正常输出的前提是:日志输出级别小于console_loglevel(在内核中数字越小优先级越高);没有指定日志级别的printk语句默认采用的级别是DEFAULT_MESSAGE_LOGLEVEL,这个默认级别一般为<4>,即与KERN_WARNING在一个级别上)。

2.3 通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。
2.3.1 查看这个文件的方法如下:
#cat /proc/sys/kernel/printk --> 6 4 1 7
上面显示的4个数据分别对应控制台日志级别默认的消息日志级别最低的控制台日志级别默认的控制台日志级别
2.3.2可用下面的命令设置当前日志级别:
# echo 8 > /proc/sys/kernel/printk
这样所有级别<8的消息都可以显示在控制台上.

2.4 如果没有输出到控制台我们可以去/var/log/messages里面去查看,如果klogd没有运行,消息不会传递到用户空间,只能查看/proc/kmsgdmesg命令可以查看)。

3、syslog编程接口

syslog库API在syslog.h文件中定义,它提供了函数openlog、syslog和closelog用来将应用程序中的日志消息写入日志系统。

  // 表示用程序的基本名字作为消息标签头<Tag:[pid]>
  openlog (program_name, 0 , LOG_AUTH ); // LOG_AUTH表示安全或授权消息  
 
 //打印消息  
  syslog (LOG_NOTICE,   //消息优先级  
  "%s\nu",  "hello printk");  //和printf相同

  closelog (); //关闭  

4、logger

logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。

logger 语法
logger [options] [messages]

  • options (选项)
    -d, –udp 使用数据报(UDP)而不是使用默认的流连接(TCP)
    -i, –id 逐行记录每一次logger的进程ID
    -f, –file file_name记录特定的文件
    -h, –help 显示帮助文本并退出
    -n, –server 写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程
    -P, –port port_num 使用指定的UDP端口。默认的端口号是514
    -p, –priority priority_level指定输入消息的优先级,优先级可以是数字或者指定为 ” facility.level” 的格式。默认级别是 “user.notice”
    -s, –stderr 输出标准错误到系统日志。
    -t, –tag tag 指定标记记录
    -u, –socket socket 写入指定的socket,而不是到内置系统日志例程。
    -V, –version 现实版本信息并退出

  • messages:写入log文件的内容消息,可以与-f配合使用。

5、日志滚动

系统时时刻刻都在产生日志,如果不及时清理,很快就会灌满硬盘,但如果要手工清理,又很麻烦。logrotate 用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。

我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过一个叫做crond的守护进程来执行,logrotate 还可以用于压缩日志文件,以及发送日志到指定的E-mail 。

logrotate 的配置文件是 /etc/logrotate.conf,主要参数如下表:

参数                    功能
compress                通过gzip 压缩转储以后的日志
nocompress              不需要压缩时,用这个参数
copytruncate            用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate          备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate                不建立新的日志文件
delaycompress           和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress         覆盖 delaycompress 选项,转储同时压缩。
errors address          专储时的错误信息发送到指定的Email 地址
ifempty                 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty              如果是空文件的话,不转储
mail address            把转储的日志文件发送到指定的E-mail 地址
nomail                  转储时不发送日志文件
olddir directory        转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir                转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript     在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript    在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily                   指定转储周期为每天
weekly                  指定转储周期为每周
monthly                 指定转储周期为每月
rotate count            指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list      不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig .rpmsave

size size               当日志文件到达指定的大小时才转储,可以指定bytes(缺省)以及KB(sizek)或者MB (sizem).

系统对 logrotate 的执行和操作:
/etc/cron.daily/路径下,有一个logrotate的shell脚本,所以cron程序会每天调用一次logrotate程序,然后logrotate程序回去检查日志文件是否符合回滚条件,并执行相应动作。
执行操作:/usr/sbin/logrotate /etc/cron.daily/logrotate.conf;

在/etc/logrotate.conf文件中,有如下选项:

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

#这个选项说明在执行logrotate程序时,同时执行/etc/logrotated目录下的所有脚本。

执行动作示例:每月清除/var/log/wtmp目录中的相关内容:

/var/log/wtmp {
monthly
create 0664 root root
rotate 1
}
  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值