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 уровней срочности теперь отсутствуют. Кодирование объекта также затруднено.