すべてのXorgログメッセージがレベル4ログ(警告)に記録されるのはなぜですか?

すべてのXorgログメッセージがレベル4ログ(警告)に記録されるのはなぜですか?

すべてのコンテンツはXorg.n.logを通じて見ることができますjournalctlXorg(私が正しく理解した場合)によって開始されたように、GDM常に--identifier=/usr/libexec/gdm-x-session。しかし、最初に与えられたヒントにもかかわらずXorg.n.log

/usr/libexec/gdm-x-session[3193]: Markers: (--) probed, (**) from config file, (==) default setting,
/usr/libexec/gdm-x-session[3193]:         (++) from command line, (!!) notice, (II) informational,
/usr/libexec/gdm-x-session[3193]:         (WW) warning, (EE) error, (NI) not implemented, (??) unknown.

すべてのメッセージにはログレベル4(警告)があります。これにより(**)(==)を含む多くの行が(II)警告として誤って表示され、実際の警告を見逃しやすいです。さらに(EE)、メッセージのログレベルも4です。

考えられる半分の解決策は、正規表現を介してXorg情報メッセージを完全にフィルタリングすることです。おそらくなぜならjournald v253-rc1)。
もう一つの方法は、複雑なパイプgrepを使用してjournalctl出力を調べることです(誰かがこれを達成する方法を知っている場合は説明してください。私はこれについて愚かです)。
しかし、方法もちろん、Xorg最初にメッセージは適切なログレベルで書かれており、ここでは完全に迷子になりました。コンテンツはどのようにXorg.n.logジャーナルに掲載されますか?これがGDM、またはXorg、または、journaldのことですか?次のうち、インポートされたメッセージのログレベルを決定するには?すべてを書き直して再コンパイルしなくてもプロセスをハイジャックできますか?もちろん、これに関連する質問を提出する必要があり、どのプロジェクトですか?ありがとうございます。

バージョン情報: Pop!_OS 22.04 LTS x86_64, 6.2.6-76060206-generic, GNOME 42.5, X.Org

答え1

Xは、現在syslogに記録する方法を提供していない最後の主流のデーモンの1つです。 ... "fwiw、GDMはXサーバーを起動してstdoutにのみ記録し、GDMはそれをsystemdログに渡します。"

-バグ 35473 - syslog にログインする機能

私はgdm-x-sessionが "info"の代わりに "warning"をデフォルトとして使用することを決めたと思いました。

すべてを書き直して再コンパイルしなくてもプロセスをハイジャックできますか?

私はそうは思わない!

私はsyslogを使用するだけで十分だろうと思います。特定のログである必要はありませんが、作業が必要になります。

たとえば、1つの課題は、Xサーバーが独自のセグフォルトを記録するように設計されていることです。したがって、シグナルハンドラで動作できる必要があります(一部の「動作」値の場合)。

/* This function does the actual log message writes. It must be signal safe.
 * When attempting to call non-signal-safe functions, guard them with a check
 * of the inSignalContext global variable. */
static void
LogSWrite(int verb, const char *buf, size_t len, Bool end_line)

代わりに、gdm-x-sessionにXログレベルフラグを解析させることをお勧めします。これは、systemdがログレベルプレフィックスを使用して実行する操作と似ています。

システムログレベルプレフィックス=

ブールパラメータを使用します。 true で StandardOutput= または StandardError= が Journal または kmsg (または +console と結合された同じ設定) に設定されている場合、実行されたプロセスによって作成されたログレベルにプレフィックスが付いたログ行はこのログレベルセットを使用して処理されますが、プレフィックスは削除されました。 falseに設定すると、これらのプレフィックスの解釈は無効になり、記録された行がそのまま渡されます。これは、stdoutまたはstderrに記録されたログメッセージにのみ適用されます。このプレフィックスの詳細については、次を参照してください。SDデーモン(3)。デフォルト値はtrueです。

XWaylandは満足のいくログをエクスポートしないため、XWaylandで始まるすべてのものにはそれほど重要ではありません。たとえば、起動中に「Markers:」の説明が記録されていないようです。したがって、すべてのXWaylandメッセージが警告として表示されても、大きな問題ではありません。

関連情報