Как использовать команду logger на Sierra?

11

Я пытаюсь записать события / контрольные точки из моего shell-скрипта, используя logger.

Как использовать loggerили syslogутилиту в OS X (версия 10.12 (16A323)) . я пытался

logger "Hello world"и проверил /var/log/system.logс помощью консольного приложения, была создана запись в журнале

Не удалось собрать строки для двоичного файла с именем '–Xó ^ H'

Как использовать loggerв OS X? Есть ли что-то, что должно быть указано для создания / добавления записи в системный журнал OS X?

SG_
источник
Не могли бы вы улучшить свой вопрос, упомянув, почему вы хотите? Это может помочь людям найти варианты для вас.
Harv
Мне удалось успешно записать запись: $ logger "Это запись журнала" $ echo $? 0 Затем, когда я проверил «Все сообщения» в моей консоли, мое сообщение обнаружилось.
Harv
1
Выход с кодом состояния 1, нет выхода. Я попытался с се гг эр.
SG_
3
Я тоже не вижу ни Hello Worldв одном /var/log/*.logфайле. Поведение, которое видит @SG_, воспроизводимо на моем Mac под управлением macOS 10.12. Кроме того, logger -s 'Hello World'правильно печатает на консоль, но не на любой файл журнала на диске.
Грэм Милн
2
Не показывается в system.log для меня, но если я просматриваю «все журналы» в консоли, он там появляется. Странный!
Harv

Ответы:

9

Потому что система регистрации Apple изменилась в macOS sierra. Они переходят от средства Apple System Log к унифицированному ведению журнала.

Вот ссылка на документацию для разработчиков.

Следующие фильтры фильтруют новый унифицированный журнал для текста «Message4me»

$logger -is -t LogTest "Message4Me" 
Oct 15 13:19:27  LogTest[51173] <Notice>: Message4Me

$log show --predicate 'eventMessage contains "Message4Me"' --last 3m

Skipping info and debug messages, pass --info and/or --debug to include.
Filtering the log data using "eventMessage CONTAINS "Message4Me""
Timestamp                       Thread     Type        Activity             PID    
2016-10-15 13:19:27.666574+0900 0x33b62c   Default     0x0                  51173  logger: Message4Me
 --------------------------------------------------------------------------------------------------------------------
Log      - Default:          1, Info:                0, Debug:             0, Error:          0, Fault:          0

=======

Если вы добавите --info, вы увидите и само сообщение о событии в выводе.

В предыдущих версиях ОС команда logger отправляла в файл /var/log/system.log, если приоритет был достаточно высок (например, с помощью -p alert), а также в базу данных системного журнала. В Sierra system.log не записывается, когда регистратор используется с -p alert -not в 10.12.1. Это может быть ошибкой.

Вы все еще можете использовать регистратор для отправки в новую систему ведения журналов, но для просмотра результатов придется использовать консольное приложение, утилиту cli log или новый API.

Японский
источник
1
Это почти только ссылка и ответ «возможно». Мирянин не поймет, что означают ваши команды. Пожалуйста, добавьте некоторые объяснения.
klanomath
1
Через четыре месяца и ссылка уже сломана.
Джон Смит
Я думаю, что текущая ссылка: developer.apple.com/reference/os/logging
ktappe
2

Я решил эту проблему, имея скрипт, который использует netcat для отправки определенных журналов каждые 10 минут из launchdaemon. Редактировать по мере необходимости.

#!/bin/bash

while read line    
do
    #drop log entries in the log file you don't want to sent to syslog server
   if [[ "$line" =~ ^.*recurring\ check-in.* || "$line" =~ ^.*Executing\ Policy\ Update\ Inventory.* ]]; then
     /bin/echo "" > /dev/null;
   else
     ## send logs to syslog server using netcat. Edit IP and UDP port as necessary
     echo $line | nc -v -u -w 0 10.10.1.9 514
   fi
done < /var/log/system.log
Джефф Холланд
источник
1

Это не реальный ответ, а обходной путь и слишком длинный комментарий.

Я столкнулся с той же проблемой в Сьерре, когда он пытался зарегистрировать сценарий обновления для доморощенного журнала, включая команды регистратора (который работал в El Capitan). Мне пришлось отказаться от логгера и просто использовать echo, перенаправление вывода и новый лог-файл:

#!/bin/bash

Brew=/usr/local/bin/brew
Brewup_Log=/Users/user/Library/Logs/brewup.log

echo "$(date "+%Y.%m.%d %H:%M:%S")" >> $Brewup_Log 2>&1
$Brew update 2>&1 >>$Brewup_Log
....
klanomath
источник