很多时候,我们处理程序(脚本)的日志是通过重定向的方法实现,而日志的大小和切割有时就会忽略掉。 不过看了本文的介绍,你就不用再进行如此繁琐的操作了。
来看logger命令,logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件(或者自定义的文件)写入一行信息。
描述
选项:
-i 逐行记录每一次logger的进程ID.
-s 记录消息到标准错误, 包括系统日志. -f file 记录特定的文件. -p pri 输入消息的特定优先级. 优先级可以是自定义的数值或者诸如 ``facility.level'' 的格式. 举例: ``-p local3.info'' local3 facility这个设备的消息级别为info. 默认是 ``user.notice.'' -t tag 打上特定的标志. -u sock 以特定的socket代替内嵌系统常规工作 -d 使用一个数据进程代替一个流连接到这个socket. -- 结束参数列表. 这个允许消息以一个“-”开始 message 写入log文件的内容消息,可以与-f配合使用
logger 以0退出表示成功, 大于0表示失败.
可用的level名用: alert, crit, debug, emerg, err, error (deprecated
举例:
复制代码代码示例:
logger System rebooted
logger -p local0.notice -t HOSTIDM -f /dev/idmc
在脚本中使用logger命令:
复制代码代码示例:
[root@jbxue ~]# cat my_test.sh
#!/bin/bash #some other scripts goes here … logger -i -t my_test.sh -p local3.notice ” my_test.sh find some error in …” echo “Hello world”
[root@jbxue ~]# vim /etc/rsyslog.conf #在Centos6之前的版本这个文件对应的应该是/etc/syslog.conf,对应的进程为syslogd
复制代码代码示例:
*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages
复制代码代码示例:
local3.* -/var/log/my_test.log
[root@jbxue ~]# service rsyslog restart
复制代码代码示例:
#/bin/bash
#some other scripts goes here … logger -i -t my_test.sh -p local3.notice ” my_test.sh find some error in …” echo “Hello world”
[root@jbxue ~]# bash my_test.sh
日志会越来越大,系统日志是怎么变成messages.0,messages.1….的呢,接下来就说说今天的另外一个主角:logrotate。
查看配置文件:
复制代码代码示例:
[root@jbxue ~]# cat /etc/logrotate.conf
# keep 4 weeks worth of backlogs
# create new (empty) log files after rotating old ones
# use date as a suffix of the rotated file
# uncomment this if you want your log files compressed
# RPM packages drop log rotation information into this directory
# no packages own wtmp and btmp — we’ll rotate them here
/var/log/btmp {
在/etc/logrotate.d/下创建自己的配置文件:
复制代码代码示例:
[root@jbxue ~]# vim /etc//logrotate.d/my_test
/var/log/my_test.log #日志处理的目标 { nocompress #不采用压缩 daily #每天轮替 copytruncate ifempty #文件为空则不切割 olddir /root/chenjbxue/log #切割后的文件所保存的目录 rotate 4 #保存最近切割的4份文件 }
重启syslog: |