如何在Sierra上使用logger命令?


11

我正在尝试使用记录来自我的shell脚本的事件/检查点logger

如何在OS X(版本10.12(16A323))中使用loggersyslog实用程序。我努力了

logger "Hello world"/var/log/system.log使用控制台应用程序进行了检查,以下是创建的日志条目

无法获取名为“ –Xó ^ H”的二进制文件的字符串

如何logger在OS X中使用?是否需要指定任何内容来创建条目或向OS X系统日志添加条目?


您能通过提及您想为什么改善您的问题吗?这可能会帮助人们为您找到选择。
哈夫

我能够成功记录一个条目:$ logger“这是一个日志条目” $ echo $?0然后,当我在控制台中选中“所有消息”时,出现了我的消息。
哈夫

1
以状态代码1退出,无输出。我试着用LO GG呃。
SG_

3
我也看不到Hello World任何/var/log/*.log文件。在运行macOS 10.12的Mac上,可重现@SG_的行为。此外,logger -s 'Hello World'可以正确打印到控制台,但不能正确打印到任何磁盘日志文件。
格雷厄姆·米尔恩

2
对于我来说,它没有显示在system.log中,但是如果我在控制台中查看“所有日志”,它确实会显示在这里。奇!
哈夫

Answers:


9

因为苹果的日志记录系统在macOS sierra中已更改。他们正在从Apple系统日志工具转移到统一日志记录。

这是开发人员文档的链接。

以下内容过滤了文本“ 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,您还将在输出中看到事件消息本身。

在先前的OS版本中,如果优先级足够高(例如,使用-p alert),则logger命令将发送到/var/log/system.log文件以及syslog数据库。在Sierra中,当logger与-p alert -not一起使用时,无论如何在10.12.1中都不会写入system.log。这可能是一个错误。

您仍然可以使用logger来发送新的日志记录系统,但是必须使用Console应用程序或cli日志实用程序或新的API才能查看结果。


1
这几乎是仅链接和“也许”的答案。〜layman不会理解您的命令的含义。请添加一些说明。
klanomath

1
四个月后,链接已经断开。
约翰·史密斯

我认为当前链接为: developer.apple.com/reference/os/logging
ktappe

2

我有一个脚本使用netcat从启动守护程序每10分钟发送一次特定的日志,从而解决了这个问题。根据需要进行编辑。

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

这不是真正的答案,而是一种解决方法,并且评论太久。

我在Sierra尝试记录包括记录程序命令的自制程序更新Shell脚本时遇到了相同的问题(在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
....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.