引言

Mac 用户可能出于多种原因需要查看系统活动日志,例如排查异常行为、了解设备使用情况、或者仅仅是出于安全考虑。其中,屏幕的锁定与解锁活动是日常使用中最常见的交互之一。通过 macOS 内置的 log show 命令,我们可以轻松地在终端中查询并分析这些关键的系统事件,从而掌握设备何时被锁定、何时被唤醒或解锁。本文将详细介绍如何利用 log show 命令,结合特定的谓词(predicate),有效地查看 Mac 系统的屏幕锁定与解锁活动日志。

理解 log show 命令

log show 是 macOS 系统中一个非常强大的命令行工具,用于从统一日志系统中检索和显示日志消息。统一日志系统(Unified Logging System)是 macOS High Sierra 及更高版本中引入的日志记录框架,它取代了旧的系统日志(syslog)。所有来自系统、应用程序和服务的信息都会被记录在此系统中。

使用 log show 命令的基本语法是:

log show [options] [--predicate <predicate_string>]

其中,options 用于指定查询的时间范围、日志级别等,而 --predicate 则是我们精确过滤所需日志的关键。

筛选屏幕锁定与解锁活动日志

要查看屏幕的锁定与解锁活动,我们需要知道系统在记录这些事件时会生成哪些特定的日志消息。经过研究,与屏幕锁定和解锁相关的核心事件通常包含 com.apple.screenIsLockedcom.apple.screenIsUnlocked 这两个关键词。

因此,我们可以使用 predicate 参数来过滤包含这些关键词的日志条目。

查看屏幕锁定事件

要查找所有屏幕锁定的日志,可以使用以下谓词:

'eventMessage contains "com.apple.screenIsLocked"'

将其与 log show 命令结合,并指定查看最近一小时的日志,命令如下:

log show --predicate 'eventMessage contains "com.apple.screenIsLocked"' --info --last 1h

命令解析:

  • log show: 启动日志查看工具。
  • --predicate 'eventMessage contains "com.apple.screenIsLocked"': 这是核心过滤条件。它告诉 log show 只显示那些事件消息(eventMessage)中包含 "com.apple.screenIsLocked" 字符串的日志条目。
  • --info: 指定只显示“信息(info)”级别的日志。这是默认级别,但明确指定有助于理解。日志级别包括 default, info, debug, error, fault
  • --last 1h: 指定查看过去1小时内的日志。你可以根据需要修改时间范围,例如 1d(一天)、12h(12小时)、30m(30分钟)等。

查看屏幕解锁事件

同样地,要查看屏幕解锁的日志,只需将谓词中的关键词改为 com.apple.screenIsUnlocked

log show --predicate 'eventMessage contains "com.apple.screenIsUnlocked"' --info --last 1d

此命令将显示过去一天内所有屏幕解锁的活动日志。

同时查看锁定与解锁事件

如果你想在一个查询中同时查看屏幕的锁定和解锁活动,可以使用 OR 逻辑操作符将两个谓词组合起来:

log show --predicate 'eventMessage contains "com.apple.screenIsLocked" OR eventMessage contains "com.apple.screenIsUnlocked"' --info --last 24h

这个命令将列出过去24小时内所有屏幕锁定和解锁的事件。

解读日志输出

执行上述命令后,终端会显示一系列日志条目。每个条目通常包含以下信息:

  • 时间戳: 精确到毫秒的事件发生时间。这是最重要的信息,能让你知道事件发生的确切时刻。
  • 进程名/PID: 记录该事件的进程名称及其进程ID。例如,你可能会看到 WindowServerloginwindow 等进程。
  • 日志级别: 如 Info
  • 事件消息: 这是实际的日志内容,其中会包含我们用来过滤的 com.apple.screenIsLockedcom.apple.screenIsUnlocked 字符串。

示例输出片段:

2024-05-14 10:30:15.123456+0800  localhost WindowServer[123]: [com.apple.windowserver:event] CGXSetDisplayState: Screen is locked
2024-05-14 10:30:15.123456+0800  localhost loginwindow[456]: [com.apple.loginwindow:system] SessionID 100000 PID 789 user logged in
...
2024-05-14 10:45:00.789012+0800  localhost loginwindow[456]: [com.apple.loginwindow:system] Screen unlocked for user [YourUserName]
2024-05-14 10:45:00.789012+0800  localhost WindowServer[123]: [com.apple.windowserver:event] CGXSetDisplayState: Screen is unlocked

通过仔细观察时间戳,你可以清晰地追踪屏幕锁定和解锁的时间序列,以及每次会话的持续时长。

其他有用的 log show 选项

除了上述选项,log show 还有一些其他参数可以帮助你更好地查看和分析日志:

  • --style compact: 以更紧凑的格式显示日志,减少冗余信息。
  • --style syslog: 以传统的 syslog 格式显示日志。
  • --style json: 以 JSON 格式输出日志,便于程序化处理。
  • --color: 彩色输出,提高可读性。
  • --last boot: 显示自上次启动以来的所有日志。
  • --last boot -k <key>: 显示自指定启动以来的日志。可以通过 log show --predicate 'process == "kernel"' 查看启动ID。
  • --source: 显示原始日志源(例如文件路径)。

结合这些选项,你可以根据自己的需求定制日志输出。例如,要以紧凑格式查看过去6小时内的所有屏幕锁定/解锁事件:

log show --predicate 'eventMessage contains "com.apple.screenIsLocked" OR eventMessage contains "com.apple.screenIsUnlocked"' --info --last 6h --style compact

结论

通过 log show 命令配合正确的谓词,Mac 用户可以方便快捷地查询和分析系统屏幕的锁定与解锁活动日志。这不仅有助于了解个人或他人对设备的实际使用模式,也能在某些情况下成为安全审计或问题排查的重要依据。掌握这一技巧,无疑为你的 Mac 使用体验增添了一份透明度和控制力。