在macOS中开启日志服务器,接收来自内网设备的日志消息打印到系统控制台,首先需要关闭系统的SIP功能,SIP功能是macOS 10.11系统以后引入的一种新的系统保护机制,防止系统意外遭到破坏。
关闭SIP(系统完整保护)
1.进入Recovery模式,
重启macOS,按下Command+R 直到出现系统进度条后松开组合键;
2.打开终端
选择“实用工具-终端”,如图;

3.关闭SIP
输入csrutil disable
命令,

4.重启系统,即可完成SIP关闭,然后就可以继续执行如下操作:
打开 UDP 日志接收端口:
输入以下命令
sudo mount +uw /
cd /System/Library/LaunchDaemons/
sudo cp com.apple.syslogd.plist com.apple.syslogd.plist.bak
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener dict" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockServiceName string syslog" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockType string dgram" com.apple.syslogd.plist
sudo launchctl unload com.apple.syslogd.plist
sudo launchctl load com.apple.syslogd.plist
如下图所示;

检查 UDP 端口状态:
输入以下命令检查端口是否已经处于监听状态;
sudo lsof -i :514 -P

日志过滤配置
编辑配置文件,推荐直接在/etc/asl/ 目录下新建一个配置文件,
vi /etc/asl/Mikrotik
添加如下内容;
? [= Host MikroTik] [= Facility local1] file /var/log/Mikrotik.log
这里需要注意的是,上面的规则需要准确地找到远程主机发送过来的消息,消息写在Host和Facility字段中。为此,运行命令syslog -F raw
,从命令结果中可以看到原始数据输出格式如下;
[ASLMessageID 115] [Time 1592480896] [TimeNanoSec 0] [Level 6] [PID 4294967125] [UID 4294964289] [GID 4294967294] [ReadGID 80] [Host MikroTik] [Sender router] [Facility local1] [Message user user1 logged out from 192.168.1.102 via telnet]
需要说明的是,上面的[= Host MikroTik] [= Facility local7] 需要改成在syslog -F raw
命令中输出的你的设备的Host和Facility,当然,也可以添加其他内容做为过滤。
重启服务
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
注: 如果sudo launchctl unload
报错 可以使用sudo killall syslogd
命令强制杀掉进程。
以上测试在macOS 10.15.5 下测试通过。