macOS High Sierra syslog不起作用

时间:2018-04-12 20:57:53

标签: c++ c macos syslog

我尝试通过

向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();

我运行应用程序然后检查system.log

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

我在那里找不到“TEST MESSAGE 2”。我也尝试通过“syslog”检查它

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

所以“记录器”再次起作用。我尝试通过编译的应用程序执行相同的操作,但我看不到“TEST MESSAGE2”。然后我通过“syslog -s -l er TEST MESSAGE3”做同样的事情。我再次看不到TestApp.log和system.log中的消息。

我阅读了有关登录macOS的信息,它描述了一些更改,但它没有说旧的syslog方法不起作用。

我做错了什么?为什么“logger”工作但是“syslog”和我编译的(Hello World)应用程序不起作用?

由于

1 个答案:

答案 0 :(得分:3)

Apple在macOS Sierra中破坏了syslog(3)功能,而在High Sierra中则继续受到破坏。没有足够的词汇来描述苹果的变化是多么愚蠢。

最能看到编译程序(例如包括PHP解释器)发送的日志消息的是使用这样的命令将其从Apple的钝存储中拉出:

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

但这只会导致部分syslog功能。不支持通过UDP将日志发送到中央收集点,并且现在缺少8个紧急级别中的大多数。设施编码同样受到阻碍。