Làm thế nào để sử dụng lệnh logger trên Sierra?


11

Tôi đang cố gắng ghi nhật ký sự kiện / điểm kiểm tra từ tập lệnh shell của mình bằng cách sử dụng logger.

Cách sử dụng loggerhoặc syslogtiện ích trong OS X (phiên bản 10.12 (16A323)) . Tôi đã thử

logger "Hello world"và được kiểm tra /var/log/system.logbằng ứng dụng Console, sau đây là mục nhật ký được tạo

Không thể thu hoạch chuỗi cho nhị phân có tên 'MạnhXó ^ H'

Làm thế nào để sử dụng loggertrong OS X? Có bất cứ điều gì được chỉ định để tạo / thêm một mục vào nhật ký hệ thống OS X không?


Bạn có thể vui lòng cải thiện câu hỏi của bạn bằng cách đề cập tại sao bạn muốn? Điều đó có thể giúp mọi người tìm thấy các lựa chọn cho bạn.
Thu hoạch

Tôi đã có thể đăng nhập thành công một mục: $ logger "Đây là mục nhật ký" $ echo $? 0 Sau đó khi tôi kiểm tra "Tất cả tin nhắn" trong Bảng điều khiển, tin nhắn của tôi xuất hiện.
Thu hoạch

1
Đã thoát với mã trạng thái 1, không có đầu ra. Tôi đã thử với lo gg er.
SG_

3
Tôi cũng thấy không có Hello Worldtrong bất kỳ /var/log/*.logtập tin. Hành vi @SG_ đang thấy, có thể tái tạo trên máy Mac của tôi đang chạy macOS 10.12. Ngoài ra, logger -s 'Hello World'không in chính xác vào bàn điều khiển nhưng không vào bất kỳ tệp nhật ký trên đĩa nào.
Graham Miln

2
Không hiển thị trong system.log cho tôi, nhưng nếu tôi xem "tất cả các bản ghi" trong bảng điều khiển, nó sẽ hiển thị ở đó. Lạ!
Thu hoạch

Câu trả lời:


9

Bởi vì hệ thống đăng nhập của Apple đã thay đổi trong macOS sierra. Họ đang chuyển từ cơ sở Nhật ký hệ thống Apple sang đăng nhập hợp nhất.

Đây là một liên kết đến tài liệu dành cho nhà phát triển.

Sau đây lọc nhật ký hợp nhất mới cho văn bản "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

=======

Nếu bạn thêm --info, bạn cũng sẽ thấy thông báo sự kiện trong đầu ra.

Trong các phiên bản HĐH trước, lệnh logger sẽ gửi đến tệp /var/log/system.log nếu mức độ ưu tiên đủ cao (ví dụ: sử dụng cảnh báo -p) cũng như đến cơ sở dữ liệu nhật ký hệ thống. Ở Sierra, system.log không được ghi vào khi logger được sử dụng với cảnh báo -p - không có trong 10.12.1. Đây có thể là một lỗi.

Bạn vẫn có thể sử dụng logger để gửi cho anh ấy hệ thống ghi nhật ký mới, nhưng sẽ phải sử dụng ứng dụng Console hoặc tiện ích nhật ký cli hoặc API mới để xem kết quả.


1
Đây gần như chỉ là một liên kết và một câu trả lời "có thể". A ~ cư sĩ sẽ không hiểu ý của bạn. Vui lòng thêm một số lời giải thích.
klanomath

1
Bốn tháng sau, và liên kết đã bị hỏng.
John Smith

Tôi nghĩ rằng liên kết hiện tại là: developer.apple.com/reference/os/logging
ktappe

2

Tôi đã giải quyết vấn đề này bằng cách có một tập lệnh sử dụng netcat để gửi nhật ký cụ thể cứ sau 10 phút từ launchdaemon. Chỉnh sửa khi cần thiết.

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

Đây không phải là câu trả lời thực sự mà là một cách giải quyết và quá dài cho một nhận xét.

Tôi đã đối mặt với cùng một vấn đề ở Sierra khi cố gắng ghi lại một kịch bản shell cập nhật homebrew bao gồm các lệnh logger (hoạt động trong El Capitan). Tôi đã phải từ bỏ logger và chỉ đơn giản là sử dụng echo, chuyển hướng đầu ra và một tệp nhật ký mới:

#!/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
....
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.