編集2016-06-02
一般に「Upstartログメッセージ」を検索する場合は、を確認してください/var/log/upstart/。そこで、Upstart はUpstartサービスを保存stdoutしstderrます。これを指摘してくれたleopdの回答に感謝します。
Upstart自体からのログメッセージを探している場合は、によって構成initctl log-priorityされinitctl emit、によって出力されます。
短縮版
ログエントリは、実際にはdmesgに表示されるはずです。それにもかかわらず、それらはデフォルトでは表示されません/var/log。
それら/var/logも必要な場合は、$KLogPermitNonKernelFacility onrsyslogdの構成に追加します。/etc/rsyslog.d/60-custom.conf編集を避けるようなカスタムファイルを作成することをお勧めします/etc/rsyslog.conf。これはdpkgによって管理されているためです。今、成り上がりのメッセージがで表示されるはずです/var/log/syslogあなたは成り上がり者の設定した後、log-priorityへinfoたりそうします。
ロングバージョン
これは、追跡する日かかったが、どうやらUpstartは(1.5)がないではない syslogにログインし、あること、それは、glibcの関数を呼び出していませんsyslog()。代わりに、Upstartはdmesgが読み取るカーネルリングバッファーにログを記録します。今、ユーザー空間プロセスがそのバッファーに書き込むことは不可能だと思いましたが、明らかにに書き込むことで可能/dev/kmsgになり、Upstartはまさにそれを行います。これがパズルの最初の部分です。
2番目の部分は、カーネルリングバッファーに書き込まれたメッセージがカーネルによってsyslogに自動的にコピーされるという広く信じられていることです(少なくとも、私は常に考えていました)。これは、実際にはsyslogdと連携して動作するklogdというユーザー空間デーモンによって実際に行われます。明らかに、rsyslogdはsyslogdを置き換えますが、明らかにklogdも置き換えます(並べ替え:末尾の注を参照)。
3番目の部分は、ユーザー空間からカーネルリングバッファーに書き込まれたメッセージは、実際にはカーネル空間から書き込まれたメッセージとは異なるように見えることです。つまり、機能が異なります。dmesgには、これと対話するいくつかのオプションがあります。-xファシリティ(および優先度)を表示し-u、-kdmesgにそれぞれユーザーファシリティメッセージとカーネルファシリティメッセージのみを表示するように指示します。
これがクリンチャーです。デフォルトでは、rsyslogd は、カーネルリングバッファーからメッセージを読み取るときに、非カーネル機能を持つメッセージを無視します。関連する設定オプションはです$KLogPermitNonKernelFacility。これはデフォルトでオフになっており、rsyslogdでこれらのメッセージを処理する場合はオンにする必要があります。残りのrsyslogdの設定では、カーネルリングバッファーにあるkern機能に関係なく、カーネルリングバッファーからのすべてのメッセージが機能を持つものとして扱われることに注意してください。
詳しくは
syslog
コードはsyslog()、で説明されているglibc関数を呼び出すことでsyslogに書き込むことができますman 3 syslog。どうやらこれらの関数はに書き込み/dev/logます。コードは読んでのsyslogから読み取ることができ/dev/log、これは何でsyslogdやるとその代替品。入力モジュールを使用してrsyslogd読み取ります。/dev/logimuxsock
カーネルリングバッファー
カーネル空間は、カーネル関数を呼び出すことでこのバッファーに書き込みますprintk()。したがって、printkバッファーと呼ばれることもあります。ユーザー空間は、に書き込むことでそれに書き込むことができます/dev/kmsg。ユーザースペースは、いくつかの方法により、このバッファから読み取ることができます:それはから読み取ることができます/proc/kmsg(デフォルトでは何のdmesg)、またはそれから読み取ることができ/dev/kmsg、またはそれはシステムコールを呼び出すことができますsyslog()に記載されており、man 2 syslogかつある完全に異なる glibcの機能からsyslog()説明をでman 3 syslog。glibcは、実際にこの混乱を軽減するためにsyslog()呼び出されるシステムコールにラッパーを提供しますklogctl()。
従来、klogdこれらのインターフェイスの1つから読み取り、glibc関数syslog()を呼び出してsyslogにコピーします。rsyslogdはimklog入力モジュールを介してこれらのインターフェースの1つを読み取りますが、知る限りではglibcを呼び出すことはありませんsyslog()。imklog他の入力モジュールからの出力を処理するのと同じように、単に出力を処理します。カーネルリングバッファーにあるファシリティメッセージに関係なくimklog、すべての出力にkernファシリティがあるという追加の警告があります。
参照資料
dmesgここで説明するコンテキストなしでは意味がありませんでした。