【问题标题】:How to check syslog in Bash on Linux?如何在 Linux 上的 Bash 中检查系统日志?
【发布时间】:2011-08-29 18:47:34
【问题描述】:

在 C 中我们这样记录:

syslog( LOG_INFO, "proxying %s", url );

在 Linux 中我们如何查看日志?

【问题讨论】:

  • 函数syslog不是写入到系统日志吗? (除非您谈论的是用于访问内核消息环形缓冲区的较低级别,但我怀疑urlint。)
  • 这个 Q 应该迁移到 unix.SE.com,不确定是否值得标记以引起 mod 的注意(我标记了)。

标签: linux bash syslog


【解决方案1】:

less /var/log/syslog怎么样?

【讨论】:

  • @kern:您使用的是哪个 linux 发行版和版本?
  • @kern:查看/etc/syslog.conf的内容
  • tail -f /var/log/syslog 非常好,因为它显示了进入系统日志的最新输出。如果您尝试实时解决问题,而不是查看严格过去的问题,它会很有用。
  • 它实际上是 CentOs 的 /etc/rsyslog.conf
  • @ArunprasadRajkumar 另一种方法是避免将普通用户阅读的消息记录到系统日志中
【解决方案2】:

在 Fedora 19 上,答案似乎是 /var/log/messages。虽然检查/etc/rsyslog.conf是否已更改。

【讨论】:

  • 我在 openSUSE 上检查过它,发现它也适用于它。感谢分享!
  • 也适用于 CentOS
【解决方案3】:

默认情况下,它会登录到/var/log/syslog的系统日志,因此可以被以下人员读取:

tail -f /var/log/syslog

如果文件不存在,请检查/etc/syslog.conf 以查看 syslogd 的配置文件。 请注意,配置文件可能不同,因此请检查正在运行的进程是否使用不同的文件:

# ps wuax | grep syslog
root      /sbin/syslogd -f /etc/syslog-knoppix.conf

注意:在某些发行版(例如 Knoppix)中,所有记录的消息都可以发送到不同的终端(例如/dev/tty12),因此要访问例如tty12 尝试按 Control+Alt+F12

您还可以使用lsof 工具找出syslogd 进程正在使用的日志文件,例如

sudo lsof -p $(pgrep syslog) | grep log$ 

要将测试消息发送到 shell 中的 syslogd,您可以尝试:

echo test | logger

使用跟踪工具进行故障排除(Linux 上为strace,Unix 上为dtruss),例如:

sudo strace -fp $(cat /var/run/syslogd.pid)

【讨论】:

    【解决方案4】:

    一个非常酷的工具是journalctl

    例如,向控制台显示 syslog:journalctl -t <syslog-ident>,其中 <syslog-ident> 是您为函数 openlog 提供的用于初始化 syslog 的标识。

    【讨论】:

    • 如果你使用syslog-ng和systemd服务,你可以用journalctl --unit=syslog-ng@default.service查看syslog
    【解决方案5】:

    tail -f /var/log/syslog | grep process_name 其中process_name是我们感兴趣的进程的名称

    【讨论】:

      【解决方案6】:

      如果你喜欢 Vim,它有内置的 syslog 文件语法高亮,例如它将以红色突出显示错误消息。

      vi +'syntax on' /var/log/syslog
      

      【讨论】:

        【解决方案7】:

        在某些 Linux 系统(例如 Debian 和 Ubuntu)上,系统日志每天轮换一次,并且您有多个日志文件,其中两个最新文件未压缩而旧文件被压缩:

        $ 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
        

        要搜索所有系统日志文件,您可以使用以下命令:

        $ sudo zcat -f `ls -tr /var/log/syslog*` | grep -i error | less
        

        zcat 首先解压并打印所有 syslog 文件(最旧的在前),grep 进行搜索,less 将结果分页搜索。

        要执行相同的操作,但使用以系统日志文件名称为前缀的行,您可以使用 zgrep

        $ sudo zgrep -i error `ls -tr /var/log/syslog*` | less
        
        $ zgrep -V | grep zgrep
        zgrep (gzip) 1.6
        

        在这两种情况下,如果普通用户无法读取 syslog 文件,则需要 sudo

        【讨论】:

          猜你喜欢
          • 2017-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-20
          • 2012-06-14
          • 2011-07-01
          • 1970-01-01
          相关资源
          最近更新 更多