在 Mac 上读取 syslog 输出

我有一个为 Linux 编写的程序,我正在尝试构建和运行它在我的 MacOS 10.5机器上。该程序构建和运行没有问题,但是它对 syslog 进行了许多调用。我知道在我的 Mac 上运行的是 sy足迹,但是我似乎找不到我的 syslog 调用被输出到哪里。

Syslog 调用的形式是

syslog (LOG_WARNING, "Log message");

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

91818 次浏览

不确定的时候,总会有 man syslog

您可以在 /var/log/syslog中找到您的消息; 我的机器是开箱即用的,只包含高级消息,所以您可能需要有您的设置。

您还可以通过 Syslog (1)读取消息,或者使用以下命令创建测试消息

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

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

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

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

enter image description here

基于 Charlie 的回答,我想补充一点,您应该看一下 syslog.conf(5)的页面,还应该看一下文件 /etc/syslog.conf(默认情况下,syslog 配置是在这里定义的,而且,正如我看到的,在 OS X 10.5.x 上也是这样)。

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

控制台,由 Matthew Schinckel 在他的回答中提到,是美国手语的图形用户界面。它将显示数据库中存在的任何消息,这些消息是通过侧栏中列出的查询获取的。默认情况下有两个查询; 一个只显示与控制台工具一起发送的消息(NSLog使用的) ,而另一个显示 所有日志消息。检查全部消息查询; 您可能会在那里找到您的消息。

如果你查看/etc/asl.conf,你会看到这一行:

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

幸运的是,在您的情况下,消息将通过这个检查,因为警告优先于(少于)通知。

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

/var/log/system.log

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

另见“ logger”(man logger)和“ syslog”(man syslog)。

也许值得注意的是: 苹果过去使用的是真正的 syslogd,但与此同时,所有这一切都转向了 ASL (苹果系统日志)。syslog命令仍然可用,但是它只能访问这一个日志。如果希望跨所有配置的日志文件访问所有 ASL 日志消息,请使用 log命令。

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

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

有关可以执行的所有操作、它所知道的所有参数以及可以筛选的属性,请参见 man log

如果您需要复杂的 syslog分析(在终端、 regexp 中每小时导航一次,实时比较其他文件,甚至在 syslog上运行 SQL) ,伊纳将无缝地为您提供它。

安装:

brew install lnav

用法:

lnav /var/log/system.log

用户界面本身:

enter image description here

大苏尔

不幸的是,没有一个明确的答案对我起作用。

对我有效的方法:

使用 mail程序从终端访问的 系统邮件在电子邮件中记录了所有的 /usr/sbin/cron日志。