UNIX 系统日志

Posted 脚本语言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNIX 系统日志相关的知识,希望对你有一定的参考价值。

系统日志

UNIX 系统有一个非常灵活和强大的日志系统,它让你能够记录几乎任何你能想象的东西,然后你可以操作日志来获取你需要的信息。
许多版本的 UNIX 提供了一个名为 syslog 的通用日志工具,有信息需要记录的单独程序要将信息发送到 syslog。
Unix syslog 是一个主机可配置的,统一的系统日志工具。该系统采用集中式的系统日志进程,其运行程序  /etc/syslogd  或者  /etc/syslog
系统记录器的操作是相当简单的。程序发送日志条目到 syslogd,其将会在配置文件  /etc/syslogd.conf  或  /etc/syslog  中查找,当找到一个匹配后,将日志消息写入到期望的日志文件中。
现有你应该了解的四种基本日志术语:
术语
描述


Facility
此标识符用来描述提交的日志信息的应用程序或进程。例如邮件,内核和 FTP。
Priority
一个显示消息重要性的指示器。syslog 作为准则定义了消息的级别,从调试信息到关键事件。
Selector
一个或更多的 facility 和 level 的结合体 。当一个输入事件匹配一个 selector 时,一个 action 会被执行。
Action
传入的消息匹配 selector 时会发生的事情。Action 可以将消息写入日志文件,将消息回传到控制台或其他设备,将消息写入到一个登录用户,或将消息发送到另一个日志服务器。

Syslog Facilities

下面是 selector 可用的 facility。不是所有的 facility 都存在于所有版本的 UNIX。
Facility
描述


auth
需要用户名和密码的相关活动(getty,su,login)
authpriv
类似于 auth 的认证,但是记录的文件只能被授权的用户读取。
console
用于捕获信息,这些信息一般会传向系统控制台。
cron
与 cron 系统有关的计划任务信息。
daemon
所捕获的所有系统守护进程信息。
ftp
ftp 守护进程相关的信息。
kern
内核信息。
local0.local7
用户自定义使用的本地信息。
lpr
与打印服务系统有关的信息。
mail
与邮件系统相关的信息。
mark
用于生产日志文件中时间戳的伪事件。
news
与网络新闻传输协议( nntp )有关的信息。
ntp
与网络时间协议有关的信息。
user
普通用户进程产生的信息。
uucp
UUCP 子系统生成的信息。

Syslog 优先级

syslog 的优先级( Priority )如下表:
Priority
描述


emerg
紧急情况,如即将发生的系统崩溃,通常会广播到所有用户。
alert
需要立即修改的情况,如系统数据库的损坏。
crit
关键的情况,如一个硬件的错误。
err
普通错误。
warning
警告
notice
不是一个错误的情况,但是可能需要用特定方式的处理一下。
info
报告性的消息。
debug
用于调试程序的消息。
none
没有重要级别,通常用于指定非日志的消息。
facility 和 level 的组合能够让你辨别记录了什么和这些日志信息去哪儿了。
每个程序尽职尽责地向系统记录器发送消息,记录器基于 selector 定义的 level 决定跟踪什么和舍弃什么信息。
当你指定了一个 level,系统会记录这一 level 及更高 level 的一切信息。

文件 /etc/syslog.conf

文件 /etc/syslog.conf 用于配置记录消息的位置。一个典型的 syslog.conf 文件看起来应该像这样:
 *.err;kern.debug;auth.notice /dev/console daemon,auth.notice /var/log/messages lpr.info /var/log/lpr.log mail.* /var/log/mail.log ftp.* /var/log/ftp.log auth.* @prep.ai.mit.edu auth.* root,amrood netinfo.err /var/log/netinfo.log install.* /var/log/install.log *.emerg * *.alert |program_name mark.* /dev/console
文件中的每一行包含两部分:
  • 一个消息 selector,其指定了哪种消息用来记录。例如,内核的所有错误信息或所有调试信息。
  • 一个 action,其指明了对接收的消息该怎么处理。例如,写入一个文件中或者将消息发送到用户的终端。
下面是上述配置的注意事项:
  • 消息 selector 有两部分:facility 和 priority。例如, kern.debug 选择了所有由内核( facility )产生的的调试信息( priority )。
  • 消息 selectetor kern.debug 选择了所有 priority 大于 debug 的信息。
  • 在任何 facility 和 priority 位置上的星号,表示“所有”的意思。例如, *.debug 表示所有 facility 的调试信息,而 kern.* 表示内核所产生的所有信息。
  • 你也可以用逗号来指定多个 facility。两个或两个以上的 selectetor 可以用分号组合在一起。

日志记录 Action

action 部分指定了下面五个 action 中的其中一个:
  1. 将信息记录到一个文件或设备。例如, /var/log/lpr.log  或者  /dev/console
  2. 发送一个消息给一个用户。你可以用逗号分开指定多个用户名(例如,root,amrood)。
  3. 发送一个消息给所有用户。在这种情况下,action 部分包含了一个星号(例如,*)。
  4. 用管道发送消息到程序。在这种情况下,程序是在 UNIX 管道符号(|)后指定。
  5. 将消息发送到另一台主机上的 syslog。在这种情况下,action 部分包含了一个前面有 at 符号的主机名(例如,@w3cschool.cn)。

logger 命令

UNIX 提供了 logger 命令,这是处理系统日志记录的一个非常有用的命令。logger 命令发送日志消息到 syslogd 守护进程,从而驱使系统记录日志。
这意味着我们可以随时用命令行检查 syslogd 守护进程及其配置。logger 命令提供了一种在命令行上添加一行条目到系统日志文件中的方法。
该命令的格式是:
    
 
   
   
 
logger [-i] [-f file] [-p priority] [-t tag] [message]...
下面是具体的参数细节:
选项
描述


-f filename
使用文件 filename 的内容作为消息来记录。
-i
日志的每一行都记录进程的 id。
-p priority
指定输入消息的优先级 priority(指定的 selector),优先级 priority 可以是数字或者指定为 facility.level 对的格式。默认参数是 user.notice。
-t tag
用指定 tag 标记记录到日志中的每一行。
message
字符串参数,它的内容以特定顺序连接在一起,由空格分开。

日志轮换

日志文件有快速增长的特点,并消耗大量的磁盘空间。大多数 UNIX 发行版系统使用了工具(如 newsyslog 或 logrotate)启用日志轮换功能。
这些工具由 cron 守护进程在一个频繁的时间间隔里调用。你可以在 newsyslog 或 logrotate 的手册页中获取更多的细节内容。

重要日志文件的位置

所有的系统应用程序创建自己的日志文件在  /var/log  和它的子目录里。下面这里有几个重要的应用,其相应的日志目录:
应用
目录


httpd
/var/log/httpd
samba
/var/log/samba
cron
/var/log/
mail
/var/log/
mysql
/var/log/


以上是关于UNIX 系统日志的主要内容,如果未能解决你的问题,请参考以下文章

argparse 代码片段只打印部分日志

常用python日期日志获取内容循环的代码片段

应急响应技术之unix/linux检查

text Davivienda片段#davivienda #unix

sh unix片段

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情