macOS High Sierra системный журнал не работает

Я пытаюсь отправить сообщение в системный журнал через

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
....

и я не могу найти "ТЕСТОВОЕ СООБЩЕНИЕ 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

Так что "регистратор" снова работает. Я пытаюсь сделать то же самое через скомпилированное приложение, но я не вижу "ТЕСТОВОЕ СООБЩЕНИЕ 2". Затем я делаю то же самое с помощью "syslog -s -l er TEST MESSAGE3". Снова я не вижу сообщения в TestApp.log и system.log.

Я прочитал информацию о регистрации в macOS, и она описывает некоторые изменения, но не говорит, что старый метод syslog не будет работать.

Что я делаю неправильно? Почему "logger" работает, а "syslog" и мое скомпилированное (Hello World) приложение не работают?

Спасибо

1 ответ

Решение

Яблоко сломалось syslog(3) функциональность в macOS Sierra, и она продолжает нарушаться в High Sierra. Там нет адекватных слов, чтобы описать, как глупо было изменение Apple.

Самое близкое к тому, чтобы увидеть журнальные сообщения, отправленные скомпилированными программами (включая, например, интерпретатор PHP), - это использовать такую ​​команду, чтобы вытащить их из тупого хранилища Apple:

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

Но это лишь часть функциональности системного журнала. Не поддерживается отправка журналов в центральный пункт сбора через UDP, и большинство из 8 уровней срочности теперь отсутствуют. Кодирование объекта также затруднено.

Другие вопросы по тегам