我刚刚开始学习journald
,在它的main()
函数(in journald.c
)中我遇到了一个函数调用log_set_prohibit_ipc(true);
谁能告诉我为什么默认设置为true?
答案1
在systemd
源代码中,您可以看到以下声明src/basic/log.h
:
/* If turned on, then we'll never use IPC-based logging,
* i.e. never log to syslog or the journal. We'll only
* log to stderr, the console or kmsg */
void log_set_prohibit_ipc(bool b);
所以看起来这个函数会阻止journald
写入日志。事实上,如果我们看看它的所有用途:
stew ~/src/systemd-246.1/src $ grep -rw log_set_prohibit_ipc
shutdown/shutdown.c: log_set_prohibit_ipc(true);
shared/generator.c: log_set_prohibit_ipc(true);
journal/journald.c: log_set_prohibit_ipc(true);
core/manager.c: log_set_prohibit_ipc(!manager_journal_is_running(m));
core/main.c: log_set_prohibit_ipc(true);
basic/log.h:void log_set_prohibit_ipc(bool b);
basic/log.c:void log_set_prohibit_ipc(bool b) {
我们看到它log_set_prohibit_ipc( ... )
被设置为true
除了core/manager.c
(这是主要的 systemd 管理器)之外的任何地方。即使如此,只有当没有其他管理器正在运行时,该管理器才会记录日志。
这里有一些猜测,但我猜测这意味着主管理器将代表其他 systemd 组件记录内容,避免重复或内部日志。这也可能是单例设计模式的实现,可能是为了简化多写入器并发问题。