linux下logger与logrotate记录脚本日志

发布时间:2020-04-26编辑:脚本学堂
本文介绍下,linux下的logger命令与logrotate记录脚本日志的方法,有需要的朋友参考下。

很多时候,我们处理程序(脚本)的日志是通过重定向的方法实现,而日志的大小和切割有时就会忽略掉。
有时可能会加条linuxjishu/14008.html target=_blank class=infotextkey>find命令检测一下大小或超过一定时间执行删除或切割操作。

不过看了本文的介绍,你就不用再进行如此繁琐的操作了。

来看logger命令,logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件(或者自定义的文件)写入一行信息。
下面就是logger的man信息
用法
logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]

描述
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表示失败.
可用的facility名有: auth, authpriv (for security information of a
sensitive nature), cron, daemon, ftp, kern, lpr, mail, news, security
(deprecated synonym for auth), syslog, user, uucp, and local0 to local7,
inclusive.

可用的level名用: alert, crit, debug, emerg, err, error (deprecated
synonym for err), info, notice, panic (deprecated synonym for emerg),
warning, warn (deprecated synonym for warning).

举例:
 

复制代码 代码示例:
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
修改这一行:增加local3.none,表示local3上的任何消息都不记录到/var/log/messages 中
 

复制代码 代码示例:
*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages


增加这一行:意思是来自local3的所有消息都记录到/var/log/my_test.log ,前面加个“-”,说明要启用写入缓冲
 

复制代码 代码示例:
local3.* -/var/log/my_test.log

[root@jbxue ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[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 ~]# bash my_test.sh
Hello world
[root@jbxue ~]# cat /var/log/my_test.log
Aug 14 23:15:19 localhost my_test.sh[31996]: my_test.sh find some error in …
Aug 14 23:32:41 localhost my_test.sh[32096]: my_test.sh find some error in …

日志会越来越大,系统日志是怎么变成messages.0,messages.1….的呢,接下来就说说今天的另外一个主角:logrotate
它用来管理系统中大大小小的日志的切割与轮替。

查看配置文件:
 

复制代码 代码示例:

[root@jbxue ~]# cat /etc/logrotate.conf
# see “man logrotate” for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

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

# no packages own wtmp and btmp — we’ll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

在/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:
#service syslog restart
如此便实现了日志的按计划轮替。