systemd 日志中的“org.gnome.Shell.desktop[1711]:”是什么意思?

systemd 日志中的“org.gnome.Shell.desktop[1711]:”是什么意思?
$ journalctl -b
...
Mar 23 18:18:50 alan-laptop pkexec[31408]: pam_unix(polkit-1:session): session opened for user root by (uid=1001)
Mar 23 18:19:47 alan-laptop org.gnome.Shell.desktop[1711]: libinput error: client bug: timer event5 debounce short: offset negative (-3ms)
...

我将第一行理解为来自 PID 31408 的日志消息,它是该pkexec命令的一个实例。

但我 100% 确定我没有org.gnome.Shell.desktop在任何地方调用可执行文件。确实存在具有该名称的文件,但它是 XDG 桌面文件。

$ find -xdev -name 'org.gnome.Shell.desktop*' 2>/dev/null
./usr/share/applications/org.gnome.Shell.desktop
$ ls -l ./usr/share/applications/org.gnome.Shell.desktop
-rw-r--r--. 1 root root 8179 Jan 22 10:19 ./usr/share/applications/org.gnome.Shell.desktop

问题

为什么不显示此日志消息gnome-shell[1711]

这是如何实施的?

有人认为这样会更有用吗?如果是这样,为什么?

环境

软呢帽27

  • systemd-234-10.git5f8984e.fc27.x86_64
  • gnome-session-3.26.1-1.fc27.x86_64

答案1

TL;DR:是 GNOME Shell 决定这样做的。他们在同一进程内运行多个应用程序(小程序),因此他们决定使用 XDG 菜单规范作为附加到消息的“标签”。

完整解释如下...


因此,日志会合成类似于系统日志的消息,您可以从与每条消息一起存储的内部字段中看到该消息。 (您可以使用格式查看内部字段-o verbose。)

通常带有程序名称的字段,也称为“标签”,存储在系统日志_标识符场地。

(其他程序使用 SYSLOG_IDENTIFIER。例如,logger默认情况下会从调用它的用户发送标签,您可以使用该-t选项覆盖它。)

登录日志的方式主要有 3 种:使用传统的方式系统日志(3)接口,通过从 systemd 服务写入 stdout 或 stderr,或使用本机日志接口。

GNOME Shell 使用本机日志接口,特别是sd_journal_stream_fdAPI。该函数采用标识符作为第一个参数,然后将其用作通过该流发送的消息的 SYSLOG_IDENTIFIER。

初始化日志流的 GNOME Shell 代码可以在src/shell-app.c,并且追溯到appid调用者的使用表明它是使用设置的g_app_info_get_id

查找 g_app_info_get_id,您会发现该 ID 是特定于平台的,但“在 Unix 上,这是 xdg 菜单规范中的桌面文件 id”,这与您所观察到的内容相匹配。

src/shell-app.c 中的代码前面有一条注释,解释了其基本原理:

/* This sets up the launched application to log to the journal
 * using its own identifier, instead of just "gnome-session".
 */

换句话说,GNOME Shell 运行多个应用程序(通过小程序),因此 GNOME Shell 开发人员认为在日志消息中使用 XDG 菜单规范会更合适,这样您就可以知道哪个小程序正在生成它......


这些日志记录流也可以由任何子进程继承,例如 Xwayland。在这种情况下,标签后面的 PID 似乎指的是 gnome-shell,即打开stream_fd 的进程,而不是向 fd 写入消息的子进程。下面的日志消息显示 Xwayland 服务器崩溃,但 PID 3493 是 gnome-shell 的 PID,而不是 Xwayland。

3 月 17 日 18:08:39 alan-laptop org.gnome.Shell.desktop[3494]:(EE)捕获信号 7(总线错误)。服务器中止

相关内容