Como usar o comando logger no Sierra?


11

Estou tentando registrar eventos / pontos de verificação do meu shell-script usando logger.

Como usar loggerou syslogutilitário no OS X (versão 10.12 (16A323)) . eu tentei

logger "Hello world"e verificada /var/log/system.logusando o aplicativo Console, a seguir foi a entrada de log criada

Falha ao coletar seqüências de caracteres para o binário chamado '–Xó ^ H'

Como usar loggerno OS X? Há algo a ser especificado para criar / adicionar uma entrada ao log do sistema OS X?


Você poderia melhorar sua pergunta mencionando por que deseja? Isso pode ajudar as pessoas a encontrar opções para você.
Harv 11/11

Consegui registrar com êxito uma entrada: $ logger "Esta é uma entrada de log" $ echo $? 0 Então, quando marquei "Todas as mensagens" no meu console, minha mensagem apareceu.
Harv 11/11

1
Saiu com o código de status 1, sem saída. Eu tentei com lo gg er.
SG_

3
Eu também não vejo Hello Worldnenhum /var/log/*.logarquivo. O comportamento que @SG_ está vendo, é reproduzível no meu Mac executando o macOS 10.12. Além disso, logger -s 'Hello World'imprime corretamente no console, mas não em nenhum arquivo de log em disco.
Graham Miln # 11/16

2
Não aparece no system.log para mim, mas se eu visualizar "todos os logs" no console, ele aparecerá lá. Ímpar!
Harv 11/11

Respostas:


9

Porque o sistema de registro da Apple mudou no macOS sierra. Eles estão passando do recurso Apple System Log para o log unificado.

Aqui está um link para a documentação do desenvolvedor.

A seguir, filtra o novo log unificado do texto "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

=======

Se você adicionar --info, também verá a mensagem do evento na saída.

Nas versões anteriores do SO, o comando logger enviava para o arquivo /var/log/system.log se a prioridade fosse alta o suficiente (por exemplo, usando -p alert), bem como para o banco de dados syslog. No Sierra, o system.log não é gravado quando o logger é usado com -p alert -not na 10.12.1. Isso pode ser um bug.

Você ainda pode usar o criador de logs para enviar para ele o novo sistema de criação de log, mas precisará usar o aplicativo Console, o utilitário cli log ou a nova API para ver os resultados.


1
Isso é quase um link apenas e uma resposta "talvez". Um leigo não entenderá o que seus comandos significam. Por favor, adicione alguma explicação.
klanomath

1
Quatro meses depois, e o link já está quebrado.
John John Smith

Eu acho que o link atual é: developer.apple.com/reference/os/logging
ktappe

2

Resolvi esse problema com um script que usa o netcat para enviar logs específicos a cada 10 minutos a partir de um daemon de inicialização. Edite conforme necessário.

#!/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

Esta não é uma resposta real, mas uma solução alternativa e muito longa para um comentário.

Eu enfrentei o mesmo problema no Sierra tentando registrar um script shell de atualização de homebrew, incluindo comandos de logger (que funcionavam em El Capitan). Eu tive que abandonar o logger e simplesmente usei eco, redirecionamento de saída e um novo arquivo de log:

#!/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
....
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.