macOS High Sierra 系统日志不工作
macOS High Sierra syslog does not work
我尝试通过
向系统日志发送日志消息
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
所以 "logger" 再次工作。我尝试通过已编译的应用程序执行相同的操作,但我看不到 "TEST MESSAGE2"。然后我通过 "syslog -s -l er TEST MESSAGE3" 做同样的事情。我再次在 TestApp.log 和 system.log.
中看不到消息
我阅读了有关在 macOS 中登录的信息,它描述了一些更改,但没有说旧的 syslog 方法将不起作用。
我做错了什么?为什么 "logger" 工作但 "syslog" 和我编译的 (Hello World) 应用程序不工作?
谢谢
Apple 破坏了 macOS Sierra 中的 syslog(3)
功能,并且它在 High Sierra 中继续被破坏。没有足够的词来形容苹果的改变是多么愚蠢。
最接近于查看编译程序(包括 PHP 解释器)发送的日志消息的方法是使用这样的命令将它们从 Apple 的钝器存储中拉出:
log stream --info --debug --predicate 'sender == "<your-app-name>"' --style syslog
但这只会产生部分系统日志功能。不支持通过 UDP 将日志发送到中央收集点,并且现在缺少 8 个紧急级别中的大部分。设施编码也有问题。
我尝试通过
向系统日志发送日志消息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
所以 "logger" 再次工作。我尝试通过已编译的应用程序执行相同的操作,但我看不到 "TEST MESSAGE2"。然后我通过 "syslog -s -l er TEST MESSAGE3" 做同样的事情。我再次在 TestApp.log 和 system.log.
中看不到消息我阅读了有关在 macOS 中登录的信息,它描述了一些更改,但没有说旧的 syslog 方法将不起作用。
我做错了什么?为什么 "logger" 工作但 "syslog" 和我编译的 (Hello World) 应用程序不工作?
谢谢
Apple 破坏了 macOS Sierra 中的 syslog(3)
功能,并且它在 High Sierra 中继续被破坏。没有足够的词来形容苹果的改变是多么愚蠢。
最接近于查看编译程序(包括 PHP 解释器)发送的日志消息的方法是使用这样的命令将它们从 Apple 的钝器存储中拉出:
log stream --info --debug --predicate 'sender == "<your-app-name>"' --style syslog
但这只会产生部分系统日志功能。不支持通过 UDP 将日志发送到中央收集点,并且现在缺少 8 个紧急级别中的大部分。设施编码也有问题。