【问题标题】:Reading syslog output on a Mac在 Mac 上读取 syslog 输出
【发布时间】:2010-09-27 16:01:25
【问题描述】:

我有一个为 linux 编写的程序,我正在尝试在我的 MacOS 10.5 机器上构建和运行它。该程序可以毫无问题地构建和运行,但是它会多次调用 syslog。我知道 syslogd 正在我的 mac 上运行,但是我似乎无法找到我的 syslog 调用的输出位置。

系统日志调用的格式为

syslog (LOG_WARNING, "Log message");

知道在哪里可以找到我的日志输出吗?

【问题讨论】:

    标签: macos syslog


    【解决方案1】:

    如有疑问,总有man syslog

    您可以在/var/log/syslog找到您的留言;我的机器开箱即用设置为仅包含高级消息,因此您可能需要进行设置。

    您也可以通过 syslog(1) 读取消息,或者使用类似的命令创建测试消息

    $ syslog -s -l INFO "Hello, world."
    

    使用 P(“恐慌”)的严重性,您会立即在控制台上收到令人兴奋的消息。

    【讨论】:

    • 不需要sudo吗?
    • 不是在 Mac 上。这并不像恐慌消息实际上会导致恐慌:上次登录:控制台 499 上的 Mon Jan 14 22:41:57 $ syslog -s -l P “再见残酷的世界”来自 root@Clarke.local(非 tty)的广播消息23:57 MST...再见残酷的世界
    • 我发现我无法在控制台或 /var/log/system.log 中看到消息,除非我使用 sudo,或者我指定了 WARN 或更高版本。
    【解决方案2】:

    您可能应该使用 Console.app 来查看日志文件。很朴素。

    在左侧选择您的设备并在右侧过滤消息:

    【讨论】:

    • 嗯,Console.app自动显示system.log等日志文件。
    • 珀迪是什么??
    • @Pacerier 我相信在这种情况下,“purdy”应该是“pretty”这个词的幽默发音。
    • 讲道理。非常感谢。
    【解决方案3】:

    基于 Charlie 的回答,我想补充一点,您应该查看 syslog.conf(5) 的联机帮助页,并查看文件 /etc/syslog.conf(默认情况下定义系统日志配置的位置以及,在我看来,在 OS X 10.5.x 上)。

    【讨论】:

      【解决方案4】:

      Mac OS X 实现了a superset of syslog's functionality。所有的系统日志都在那里,但作为 ASL 的一部分。

      Matthew Schinckel 在他的回答中提到的控制台是 ASL 上的 GUI。它将向您显示数据库中存在的任何消息,这些消息由侧栏中列出的查询获取。默认有两个查询;一个只显示使用控制台工具发送的消息(如NSLog 使用的,除其他外),而另一个显示所有 日志消息。检查所有消息查询;您可能会在那里找到您的消息。

      “全部”确实带有星号。如果你查看 /etc/asl.conf,你会看到这一行:

      # save everything from emergency to notice
      ? [<= Level notice] store
      

      幸运的是,在您的情况下,消息将通过此检查,因为警告高于(小于)通知。

      【讨论】:

        【解决方案5】:

        检查程序中某处对openlog 的调用。调用openlog 后,syslog 会将其输出保存到该日志文件而不是默认位置。

        【讨论】:

          【解决方案6】:

          /var/log/system.log

          您可以使用tail -f /var/log/system.log轻松监控它

          另请参阅“记录器”(man logger) 和“系统日志”(man syslog)。

          【讨论】:

          • 在较新的 macOS 版本中似乎不在 /var/log/system.log 中。我只能通过 Console.app 看到它们
          • 在较新的 macOS 版本上,您可以在 /private/var/log/system.log 找到系统日志。
          【解决方案7】:

          也许值得注意的是:Apple 过去使用的是真实的syslogd,但同时所有这些都切换到了 ASL(Apple 系统日志)。 syslog 命令仍然可用,但它只会访问这一个日志。如果您想访问所有配置的日志文件中 ASL 的所有日志消息,请使用 log 命令。

          例如以下显示了 Safari 在过去两天内生成的所有日志消息(请耐心等待,可能需要一段时间):

          log show --predicate 'process == "Safari"' --last 2d
          

          请参阅man log,了解您可以执行的所有操作、它知道的所有参数以及您可以过滤的属性。

          【讨论】:

            【解决方案8】:

            如果您需要复杂的syslog 分析(在终端中逐小时导航、正则表达式、实时比较其他文件,甚至在syslog 上运行 SQL)lnav 将无缝地为您提供。

            安装:

            brew install lnav
            

            用法:

            lnav /var/log/system.log
            

            用户界面本身:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多