logger命令记录日志
logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
日志的级别
日志的级别分为七级,从紧急程度由高到底: emerg 系统已经不可用,级别为紧急 alert 警报,需要立即处理和解决 crit 既将发生,得需要预防。事件就要发生 warnig 警告 err 错误信息,普通的错误信息 notice 提醒信息,很重要的信息 info 通知信息,属于一般信息 debug 这是调试类信息解决方法:
编辑syslog.conf, #vi /etc/syslog.conf 在第一行加入local3.none,使得设备local3的日志不记录在messages文件里, # Log anything (except mail) of level info or higher.# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
将设备local3的所有级别的信息都记录在userlog文件里,
#user log
local3.* /var/log/userlog
重新加载syslog服务的配置文件,
# service syslog reload Reloading syslogd… [ OK ] Reloading klogd… [ OK ]测试:
测试机器的环境:Red Hat Enterprise Linux 5 update 3# ping 192.168.0.1 | logger -it logger_test -p local3.notice&
[2] 22484
命令logger -it logger_test -p local3.notice中的参数含义:
-i 在每行都记录进程ID -t logger_test 每行记录都加上”logger_test”这个标签 -p local3.notice 设置记录的设备和级别# tail -f /var/log/userlog
Oct 6 12:48:43 : PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. Oct 6 12:48:43 : 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms …ping命令的输出成功输出到/var/log/userlog文件中,实验成功。
日志回卷
系统时时刻刻都在产生日志,不及时清理,会灌满硬盘,如果手工清理,很麻烦。
这种情况下,logrotate 这个程序很好的完成这个任务。 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 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~size 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 utmp rotate 1 } 实验: 1.环境: Red Hat Enterprise Linux 5.3实验描述:
1)用Cron执行logrotate命令,每分钟检查一次目标日志文件是否满足回卷限制。(2)配置/etc/logrotate.conf 或者建立一个自定义的/etc/logrotate.d /userlog
3)编辑/etc/syslog.conf 使得记录的日志信息可以写入到/var/log/userlog中。
# crontab -e
* * * * * /usr/sbin/logrotate /etc/logrotate.conf //写入这条命令 # vi /etc/logrotate.conf ***省略***/var/log/userlog {
daily size 10k 在这里单位大小写敏感应,应为 k or M create 0664 root root rotate 3 prerotate /bin/kill -HUP `cat /var/run/syslogd.pid /dev/null` /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid /dev/null` /dev/null || true endscript }加prerotate这段脚本,使syslog程序重新读取配置文件,作用是让syslog程序释放对userlog文件持有的文件描述符,否则即使日志文件回滚,syslog也不会向新产生的日志文件写数据。
如果不加这段脚本,即使logrotate程序将userlog文件截断并重命名为userlog.1,但是syslog程序仍然会向原userlog文件即userlog.1中写入数据。
# vi /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages #user log local3.* /var/log/userlog 重新加载配置文件 # service syslog reload重启crond服务
# service crond restart测试:
通过logger命令向userlog中写入数据,测试logrotate的功能 # ping 192.168.1.1 | logger -it logger_test -p local3.notice&# cd /var/log/
# ll -h userlog*
-rw-r–r– 1 root root 1.6K Oct 11 19:59 userlog
# ll -h userlog*
-rw-r–r– 1 root root 6.1K Oct 11 20:00 userlog
//虽然执行过logrotate,但是没有达到限制值
# ll -h userlog*
-rw-rw-r– 1 root root 0 Oct 11 20:08 userlog -rw-rw-r– 1 root root 15K Oct 11 20:08 userlog.1 -rw-r–r– 1 root root 18K Oct 11 20:05 userlog.2 需要注意的是,当达到限制条件时,logrotate程序会将目标日志文件userlog截断,并命名为userlog.1,将原userlog.1改名为userlog.2,以此类推, syslog程序始终向userlog文件中写数据。