모든 Xorg 로그 메시지가 레벨 4 로그(경고)에 기록되는 이유는 무엇입니까?

모든 Xorg 로그 메시지가 레벨 4 로그(경고)에 기록되는 이유는 무엇입니까?

모든 콘텐츠는 를 Xorg.n.log통해 볼 수 있습니다 journalctl. Xorg(내가 올바르게 이해했다면)에 의해 시작된 것처럼 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에 기록하는 방법을 제공하지 않는 마지막 주류 데몬 중 하나입니다." ... "fwiw, GDM은 이제 X 서버를 시작하여 stdout에만 기록하고 GDM은 이를 systemd 로그로 전달합니다."

--버그 35473 - syslog에 로그인하는 기능

나는 gdm-x-session이 "info" 대신 "warning"을 기본값으로 사용하기로 결정했다고 예상했습니다.

모든 것을 다시 작성하고 다시 컴파일하지 않고도 프로세스를 하이재킹할 수 있습니까?

난 그렇게 생각하지 않아!

나는 syslog를 사용하는 것만으로도 충분할 것이라고 생각합니다. 특정 로그일 필요는 없지만 작업이 필요할 것입니다.

예를 들어, 한 가지 과제는 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 메시지가 경고로 표시되어도 큰 문제는 아닙니다.

관련 정보