在 C 中,我们这样记录:
syslog( LOG_INFO, "proxying %s", url );
在 Linux 中我们如何检查日志?
less /var/log/syslog呢?
less /var/log/syslog
在 Fedora 19上,看起来答案是 /var/log/messages。虽然检查 /etc/rsyslog.conf如果它已经被改变。
/var/log/messages
/etc/rsyslog.conf
tail -f /var/log/syslog | grep process_name 其中 process_name是我们感兴趣的进程的名称
tail -f /var/log/syslog | grep process_name
process_name
By default it's logged into system log at /var/log/syslog, so it can be read by:
/var/log/syslog
tail -f /var/log/syslog
如果该文件不存在,请检查 /etc/syslog.conf以查看 syddd 的配置文件。 注意,配置文件可能不同,所以检查正在运行的进程是否使用不同的文件:
/etc/syslog.conf
# ps wuax | grep syslog root /sbin/syslogd -f /etc/syslog-knoppix.conf
注意: 在一些发行版(如 Knoppix)中,所有记录的消息都可以发送到不同的终端(如 /dev/tty12) ,因此要访问(如 tty12) ,请按 Control + Alt + F12。
/dev/tty12
tty12
You can also use lsof tool to find out which log file the syslogd process is using, e.g.
lsof
syslogd
sudo lsof -p $(pgrep syslog) | grep log$
要将测试消息发送到 shell 中的 syddid,可以尝试:
echo test | logger
对于故障排除,使用跟踪工具(Linux 上的 strace,Unix 上的 dtruss) ,例如:
strace
dtruss
sudo strace -fp $(cat /var/run/syslogd.pid)
A very cool util is journalctl.
journalctl
For example, to show syslog to console: journalctl -t <syslog-ident>, where <syslog-ident> is identity you gave to function openlog to initialize syslog.
journalctl -t <syslog-ident>
<syslog-ident>
openlog
如果你喜欢 Vim,它有 syslog 文件的内置语法突显,例如它会用红色突出显示错误消息。
vi +'syntax on' /var/log/syslog
在一些 Linux 系统上(例如 Debian 和 Ubuntu) ,syslog 每天都在轮换,你有多个日志文件,其中两个最新的文件被解压,而旧的文件被压缩:
$ ls -l /var/log/syslog* -rw-r----- 1 root adm 888238 Aug 25 12:02 /var/log/syslog -rw-r----- 1 root adm 1438588 Aug 25 00:05 /var/log/syslog.1 -rw-r----- 1 root adm 95161 Aug 24 00:07 /var/log/syslog.2.gz -rw-r----- 1 root adm 103829 Aug 23 00:08 /var/log/syslog.3.gz -rw-r----- 1 root adm 82679 Aug 22 00:06 /var/log/syslog.4.gz -rw-r----- 1 root adm 270313 Aug 21 00:10 /var/log/syslog.5.gz -rw-r----- 1 root adm 110724 Aug 20 00:09 /var/log/syslog.6.gz -rw-r----- 1 root adm 178880 Aug 19 00:08 /var/log/syslog.7.gz
要搜索所有 syslog 文件,可以使用以下命令:
$ sudo zcat -f `ls -tr /var/log/syslog*` | grep -i error | less
其中,Zcat首先解压缩并打印所有 syslog 文件(最老的首先) ,Grep进行搜索,更少对搜索结果进行分页。
要执行同样的操作,但使用带有 syslog 文件名称前缀的行,可以使用 Zgrep:
$ sudo zgrep -i error `ls -tr /var/log/syslog*` | less $ zgrep -V | grep zgrep zgrep (gzip) 1.6
In both cases Sudo is required if syslog files are not readable by ordinary users.