2016-06-02 편집
일반적으로 "업 스타트 로그 메시지"를 찾으려면을 확인하십시오 /var/log/upstart/
. 이것이 바로 Upstart가 Upstart 서비스를 저장 stdout
하고 저장하는 곳 stderr
입니다. 이것을 지적한 leopd의 답변에 감사드립니다.
Upstart 자체에서 로그 메시지를 찾으려면에서 구성 initctl log-priority
및 생성 한 로그 메시지를 initctl emit
읽으십시오!
짧은 버전
로그 항목은 실제로 dmesg에 표시되어야합니다. 그럼에도 불구하고 기본적으로는에 표시 되지 않습니다/var/log
.
그것들을 원한다면 rsyslogd의 설정에 /var/log
추가하십시오 $KLogPermitNonKernelFacility on
. dpkg에서 관리 /etc/rsyslog.d/60-custom.conf
하기 때문에 편집하지 않으려 는 사용자 정의 파일을 만드는 것이 좋습니다 /etc/rsyslog.conf
. 이제 갑자기 출세 한 메시지에 표시해야 /var/log/syslog
당신이 갑자기 출세의 설정하면, log-priority
에 info
정도.
긴 버전
이 추적하는 일이 걸렸습니다,하지만 분명히 갑자기 출세 한 (1.5) 않습니다 하지 syslog에 로그입니다, 그것은 glibc는 함수를 호출하지 않습니다 syslog()
. 대신, Upstart는 dmesg가 읽는 커널 링 버퍼에 기록합니다. 이제는 사용자 공간 프로세스가 해당 버퍼에 쓸 수 는 없다고 생각 했지만 분명히 쓸 수 있습니다 /dev/kmsg
. 이것이 바로 Upstart가하는 일입니다. 이것이 퍼즐의 첫 번째 부분입니다.
두 번째 부분은 커널 링 버퍼에 작성된 메시지가 커널에 의해 syslog에 자동으로 복사된다는 믿음이 널리 퍼져 있다는 것입니다. 이것은 실제로 syslogd와 함께 작동하는 전통적으로 klogd 인 사용자 공간 데몬에 의해 수행됩니다. 분명히 rsyslogd는 syslogd를 대체하지만 klogd도 대체합니다 (종종 : 끝에있는 참고 사항 참조).
세 번째 부분은 사용자 공간에서 커널 링 버퍼에 기록 된 메시지가 실제로 커널 공간에서 작성된 메시지와 다르게 보이는 것입니다. 서로 다른 기능이 있습니다. dmesg는이 기능과 상호 작용할 수있는 몇 가지 옵션을 제공합니다 -x
. 기능 (및 우선 순위) 을 표시 -u
하고 -k
dmesg에 사용자 기능 메시지와 커널 기능 메시지 만 각각 표시하도록 지시합니다.
이제 clincher가 있습니다. 기본적으로 rsyslogd 는 커널 링 버퍼에서 메시지를 읽을 때 비 커널 기능이있는 메시지를 무시 합니다. 관련 구성 옵션은입니다 $KLogPermitNonKernelFacility
. 이는 기본적으로 해제되어 있으며 rsyslogd가 이러한 메시지를 처리하도록하려면 설정해야합니다. rsyslogd의 나머지 구성은 커널 링 버퍼에있는 kern
기능과 상관없이 커널 링 버퍼의 모든 메시지를 기능 을 갖는 것으로 간주 합니다.
더 많은 정보
syslog
코드는 syslog()
에 설명 된 glibc 함수를 호출하여 syslog에 쓸 수 있습니다 man 3 syslog
. 분명히이 함수는에 쓴다 /dev/log
. 코드는을 읽어 syslog에서 읽을 수 /dev/log
있으며 이것이 syslogd
대체하는 것입니다. 입력 모듈을 사용하여 rsyslogd
읽습니다 ./dev/log
imuxsock
커널 링 버퍼
커널 공간은 커널 함수를 호출하여이 버퍼에 printk()
쓰므로 때로는 printk 버퍼라고합니다. 사용자 공간은에 쓰면 쓸 수 있습니다 /dev/kmsg
. 그것은에서 읽을 수 있습니다 : 사용자 공간은 여러 가지 방법으로이 버퍼에서 읽을 수 있습니다 /proc/kmsg
(dmesg를 기본적으로 무엇을), 또는에서 읽을 수있다 /dev/kmsg
, 또는 시스템 호출을 호출 할 수 있습니다 syslog()
에 설명되어 man 2 syslog
이며 완전히 다른 glibc는 기능에서 syslog()
설명을 에서 man 3 syslog
. glibc는 실제로 시스템 호출에 래퍼 제공 syslog()
이라고를, klogctl()
도움이 혼란을 완화.
일반적 klogd
으로 이러한 인터페이스 중 하나 에서 읽은 다음 glibc 함수 syslog()
를 호출 하여 syslog에 복사합니다. rsyslogd는 imklog
입력 모듈을 통해 이러한 인터페이스 중 하나를 읽지 만 AFAIK는 glibc 호출을 방해하지 않으므로 syslog()
klogd와 정확히 일치하지 않습니다. imklog
다른 입력 모듈 의 출력을 처리하는 것처럼 출력을 처리합니다. 커널 링 버퍼에있는 기능 메시지와 상관없이 모든 imklog
출력에 kern
기능 이 있다는 추가 경고가 있습니다.
참고 문헌
dmesg
이지만 여기에 주어진 맥락이 없으면 의미가 없습니다.