macOS High Sierra系统日志不工作。

7

我试图通过syslog发送一条日志信息:

logger -is -t TestApp -p user.error TEST MESSAGE1

然后我检查它是否存在

tail system.log
...
Apr 12 16:33:00 HOSTNAME TestApp[3024]: TEST MESSAGE1

所以它有效。然后我尝试通过编译的应用程序做同样的事情。

openlog("TestApp", LOG_PID, LOG_USER);
setlogmask(LOG_UPTO(LOG_DEBUG));
syslog(LOG_ERR, "TEST MESSAGE2");
closelog();

我运行应用程序,然后检查系统日志。

tail system.log
...
Apr 12 16:33:00 HOSTNAME TestApp[3024]: TEST MESSAGE1
....

我在那里找不到“测试消息2”。我还尝试通过“系统日志”进行检查。

syslog -s -l er TEST MESSAGE3

同样的结果。我无法在日志文件中看到消息。 好的,可能是日志设置有问题。所以我尝试将日志配置为特定的文件。我创建了/etc/asl/TestApp

# ASL configuration for TestApp
#
> /var/log/TestApp.log mode=0640 format=bsd rotate=seq compress file_max=1M all_max=5M
#
? [= Sender TestApp] file /var/log/TestApp.log
? [= Sender TestApp] [<= Level debug] claim

我重新启动了syslogd和ASL。

launchctl stop com.apple.syslogd
launchctl stop com.apple.aslmanager
launchctl start com.apple.aslmanager
launchctl start com.apple.syslogd

然后我再次通过“logger”发送消息,并检查日志。
tail TestApp.log
Apr 12 16:47:49 HOSTNAME TestApp[3062]: TEST MESSAGE1

所以,“logger”再次起作用。我试图通过编译的应用程序做同样的事情,但我看不到“TEST MESSAGE2”。然后我通过“syslog -s -l er TEST MESSAGE3”做同样的事情。同样,我无法在TestApp.log和system.log中看到消息。
我阅读了关于macOS日志记录的信息,它描述了一些更改,但没有说旧的syslog方法将不起作用。
我做错了什么?为什么“logger”有效,但“syslog”和我的编译(Hello World)应用程序不起作用?
谢谢

当在Mac OSX上使用Python的sysloghandler时,DEBUG和INFO消息会被发送到哪里?我知道它说的是“Python”,但底层的syslogd对于Python、C++(以及C等)都是相同的。 - Jonathan Leffler
转念一想,这可能并没有帮助。 - Jonathan Leffler
Jonathan,无论如何感谢你。这就是我使用LOG_ERR的原因。不管怎样,我刚刚尝试编辑asl.conf并设置“?[<= Level debug] file system.log”,重新启动守护程序,看起来它没有起作用。 - Eugen
1个回答

11

苹果在macOS Sierra中破坏了syslog(3)功能,而这个问题在High Sierra中仍然存在。没有足够的词语来描述苹果的变更有多愚蠢。

最接近看到编译程序(包括例如PHP解释器)发送的日志消息的方法可能是使用类似于以下命令将它们从苹果的晦涩存储中提取出来:

log stream --info --debug --predicate 'sender == "<your-app-name>"' --style syslog

但这只能得到部分syslog功能。现在不支持通过UDP将日志发送到集中收集点,大多数8种紧急程度级别也已经缺失。设施编码同样受到限制。


太好了!我现在可以使用它来追踪iOS模拟器日志了!但是,我如何获取像Console.app中显示的真实设备日志呢? - fatfatson
对不起,我不知道。如果你找到了,请在这里发布! - CXJ
1
这在 Monterey 中似乎仍然是个问题。我无法让我的 Go 程序记录到系统日志中。log stream 的 hack 也不起作用。 - parzival
@parzival 我在macOS 12上使用Go程序也遇到了同样的问题。我习惯于使用LOG_NOTICE级别记录日志(因为在macOS上默认情况下会丢弃LOG_INFOLOG_DEBUG消息),但现在连这个也不起作用了。你能解决这个问题吗? - xyz
2
@xyz 我最终直接将日志写入文件中。 - parzival

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