วิธีใช้คำสั่ง logger บน Sierra


11

ฉันพยายามที่จะบันทึกเหตุการณ์ / loggerเช็คคะแนนจากเปลือกสคริปต์ของฉันโดยใช้

วิธีการใช้งานloggerหรือsyslogสาธารณูปโภคในOS X (รุ่น 10.12 (16A323)) ฉันเหนื่อย

logger "Hello world"และตรวจสอบ/var/log/system.logโดยใช้แอพ Console ต่อไปนี้เป็นรายการบันทึกที่สร้างขึ้น

การเก็บเกี่ยวสตริงสำหรับไบนารีชื่อ '–Xó ^ H' ล้มเหลว

วิธีใช้loggerใน OS X มีอะไรที่ต้องระบุเพื่อสร้าง / เพิ่มรายการในบันทึกระบบ OS X หรือไม่


คุณช่วยปรับปรุงคำถามของคุณด้วยการพูดถึงว่าทำไมคุณถึงต้องการ? ที่อาจช่วยให้ผู้คนค้นหาตัวเลือกสำหรับคุณ
Harv

ฉันสามารถบันทึกรายการได้สำเร็จ: $ logger "นี่คือรายการบันทึก" $ echo $? 0 จากนั้นเมื่อฉันตรวจสอบ "ข้อความทั้งหมด" ในคอนโซลข้อความของฉันปรากฏขึ้น
Harv

1
ออกด้วยรหัสสถานะ 1 ไม่มีเอาต์พุต ฉันลองด้วยggเอ้อ
SG_

3
ฉันก็ไม่เห็นเช่นกันHello Worldใน/var/log/*.logไฟล์ใด ๆ พฤติกรรม @SG_ ที่เห็นนั้นสามารถทำซ้ำได้บน Mac ที่ใช้ macOS 10.12 นอกจากlogger -s 'Hello World'นี้พิมพ์อย่างถูกต้องไปยังคอนโซล แต่ไม่ไปยังไฟล์บันทึกบนดิสก์
Graham Miln

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) รวมถึงฐานข้อมูล syslog ในเซียร์รา system.log ไม่ได้ถูกเขียนขึ้นเมื่อคนตัดไม้ถูกใช้กับ -p alert -not ใน 10.12.1 นี่อาจเป็นข้อผิดพลาด

คุณยังสามารถใช้ตัวบันทึกเพื่อส่งไปยังระบบบันทึกใหม่ได้ แต่จะต้องใช้แอปคอนโซลหรือยูทิลิตี้การบันทึก cli หรือ API ใหม่เพื่อดูผลลัพธ์


1
นี่เป็นลิงก์อย่างเดียวและเป็นคำตอบ "อาจจะ" คนธรรมดา ~ จะไม่เข้าใจความหมายของคำสั่งของคุณ โปรดเพิ่มคำอธิบายบางอย่าง
klanomath

1
สี่เดือนต่อมาและลิงก์นั้นใช้งานไม่ได้
John Smith

ฉันคิดว่าลิงค์ปัจจุบันคือ: 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

นี่ไม่ใช่คำตอบที่แท้จริง แต่เป็นวิธีแก้ปัญหาและยาวเกินไปสำหรับความคิดเห็น

ฉันประสบปัญหาเดียวกันในเซียร์ร่าที่พยายามบันทึกสคริปต์การอัปเดตเชลล์ของ Homebrew รวมถึงคำสั่งตัวบันทึก (ซึ่งทำงานใน 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
....
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.