在Mac上阅读syslog输出

74
我有一个在Linux上编写的程序,现在我正试图在我的MacOS 10.5机器上进行构建和运行。该程序可以成功构建和运行,但是它会频繁调用syslog。我知道在我的Mac上syslogd正在运行,但我似乎找不到我的syslog调用输出到哪里了。
这些syslog调用的形式为:
syslog (LOG_WARNING, "Log message");

有什么想法可以告诉我在哪里找到我的日志输出吗?

9个回答

75

/var/log/system.log

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

另请参阅“logger”(man logger)和“syslog”(man syslog)。


2
在新版的 macOS 中,似乎不在 /var/log/system.log 文件中了。我只能通过 Console.app 来查看它们。 - Jorge Orpinel Pérez
3
在较新版本的 macOS 中,你可以在 /private/var/log/system.log 找到系统日志。 - neilco

61

建议使用Console.app查看日志文件,它很美观。

在左侧选择您的设备,然后在右侧筛选消息:

输入图像描述


21
控制台应用程序会自动显示 system.log 和其他日志文件。 - Matthew Schinckel
2
什么是 Purdy? - Pacerier
9
我相信在这种情况下,“purdy”是对“pretty”这个单词的幽默发音。 - The Rover
让人感到合理。非常感谢。 - Beckon

20

值得注意的是:Apple 曾经使用真正的 syslogd,但是现在已经全部切换到 ASL(苹果系统日志)。syslog 命令仍然可用,但它只会访问此日志。如果您想要访问所有已配置日志文件中 ASL 的所有日志消息,请使用 log 命令。

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

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

查看 man log 以获取您可以执行的所有操作、它所知道的所有参数和您可以过滤的属性。


14
当你不确定时,总是可以使用“man syslog”命令。
你可以在“/var/log/syslog”中找到你的消息;我的机器默认只包含高级别的消息,所以你可能需要更改设置。
你也可以通过“syslog(1)”来阅读消息,或者通过类似命令创建测试消息。
$ syslog -s -l INFO "Hello, world."

使用严重程度为 P(“panic”)将立即在控制台上获得令人兴奋的消息。


需要sudo吗? - Matthieu Riegler
不是在Mac上。这并不像紧急消息会导致恐慌一样: 上次登录时间:星期一 1月14日 22:41:57 499 $ syslog -s -l P "Goodbye cruel world" 广播来自root@Clarke.local的消息 (无tty)于23:57 MST... 再见残酷的世界 - Charlie Martin
我发现如果不使用sudo或指定WARN或更高级别,我无法在控制台或/var/log/system.log中看到消息。 - NeilG

11

Mac OS X实现了syslog功能的超集。所有syslog都在那里,但作为ASL的一部分。

控制台是由Matthew Schinckel在他的回答中提到的ASL上的GUI。它会显示数据库中存在的任何消息,如侧边栏中列出的查询所检索的那样。默认情况下有两个查询;一个仅显示使用Console设施发送的消息(由NSLog等工具使用),而另一个则显示所有日志消息。查看所有消息查询;您可能会在那里找到您的消息。

这个“全部”带有星号。如果您查看/etc/asl.conf,您将看到这行:

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

幸运的是,在您的情况下,该消息将通过此检查,因为警告优先级低于(数字较小)通知。


4
如果您需要进行复杂的syslog分析(在终端中逐小时导航,使用正则表达式,在实时比较其他文件甚至运行SQL查询syslog),lnav可以为您提供无缝的解决方案。
安装:
brew install lnav

使用方法:

lnav /var/log/system.log

用户界面本身:

enter image description here


1

在Charlie的回答基础上,我想补充一点,你应该查看syslog.conf(5)的man页,并且也要看一下文件/etc/syslog.conf(这是syslog配置默认定义的地方,同时,在OS X 10.5.x上也是如此)。


0

查找程序中是否有调用openlog的语句。在调用openlog之后,syslog将把其输出保存到该日志文件而不是默认位置。


0

Big Sur

很遗憾,以上提到的答案都不能解决我的问题。

对我有用的方法:

通过终端使用mail程序访问系统邮件,可以在邮件中找到所有/usr/sbin/cron的日志记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接