linux命令之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" 的格式。比如:" -p local3.info " local3 这个设备的消息级别为 info。默认级别是 "user.notice" -s, --stderr 输出标准错误到系统日志。 -t, --tag tag 指定标记记录 -u, --socket socket 写入指定的socket,而不是到内置系统日志例程。 -V, --version 现实版本信息并退出 **messages:**写入log文件的内容消息,可以与-f配合使用。 logger 以0退出表示成功,大于0表示失败。
日志级别
facility: auth: 用户授权 authpriv: 授权和安全 cron: 计划任务 daemon: 系统守护进程 kern: 与内核有关的信息 lpr 与打印服务有关的信息 mail 与电子邮件有关的信息 news 来自新闻服务器的信息 syslog 由syslog生成的信息 user 用户的程序生成的信息,默认 uucp 由uucp生成的信息 local0~7 用来定义本地策略 level: alert 需要立即采取动作 crit 临界状态 debug 调试 emerg 系统不可用 err 错误状态 error 错误状态 info 正常消息 notice 正常但是要注意
示例:
$ logger System Rebooted #往系统日志例程中写入 “System Rebooted” 可在/var/log/syslog中查看
写入到指定的log文件中示例:
$ vi /etc/rsyslog.conf #我的系统是ubuntu1204,在最后一行加入 local3.* /var/log/my_test.log 意思是来自local3的所有消息都记录到 /var/log/my_test.log 中 $ service rsyslog restart #重启rsyslog服务 $ logger -i -t "my_test" -p local3.notice "test_info" $ cat /var/log/my_test.log May 5 21:27:37 gino-virtual-machine my_test[3651]: test_info
下面来实践操作演示:
1 #########################################################################
2 # File Name: checkfs.sh
3 # Author: dty
4 # mail: 576786031@qq.com
5 # Created Time: Fri 07 Aug 2015 05:40:39 PM CST
6 #########################################################################
7 #!/bin/bash
8 logger -t checks -p user.info "starting checkfs" //-t指定标记记录。 -p 指定了日志级别info正常
9 df | cut -c52- |grep -v "Use%" |while read usage filesystem
10 do
11 if [ "${usage%\%}" -gt "85" ];then
12 logger -t checkfs -s -p user.warn "filesystem $filesystem is at $usa ge" //-s 输出标准错误。warn级别
13 fi
14 done
日志情况如下
Aug 7 18:18:55 server7 checks: starting checkfs
Aug 7 18:18:59 server7 checks: starting checkfs
Aug 7 18:19:00 server7 checks: starting checkfs
脚本我手动运行三次什么都没有
[root@server7 ~]# df | cut -c58-
Use% Mounted on
25% /
0% /dev/shm
8% /boot
因为最大才25%
现在我们把useage 的界限值更改 1 #########################################################################
2 # File Name: checkfs.sh
3 # Author: dty
4 # mail: 576786031@qq.com
5 # Created Time: Fri 07 Aug 2015 05:40:39 PM CST
6 #########################################################################
7 #!/bin/bash
8 logger -t checks -p user.info "starting checkfs"
9 df | cut -c52- |grep -v "Use%" |while read usage filesystem
10 do
11 if [ "${usage%\%}" -gt "15" ];then
12 logger -t checkfs -s -p user.warn "filesystem $filesystem is at $usage"
13 fi
14 done
此时再次运行
Aug 7 18:16:18 server7 checks: starting checkfs
Aug 7 18:16:18 server7 checkfs: filesystem / is at 25%
只显示这一条
ok
我们的用户可以是普通用户
都不能去读日志的用户 ,依然可以做到,这就是问题所所在...