編集2016-06-02
一般に「Upstartログメッセージ」を検索する場合は、を確認してください/var/log/upstart/
。そこで、Upstart はUpstartサービスを保存stdout
しstderr
ます。これを指摘してくれたleopdの回答に感謝します。
Upstart自体からのログメッセージを探している場合は、によって構成initctl log-priority
されinitctl emit
、によって出力されます。
短縮版
ログエントリは、実際にはdmesgに表示されるはずです。それにもかかわらず、それらはデフォルトでは表示されません/var/log
。
それら/var/log
も必要な場合は、$KLogPermitNonKernelFacility on
rsyslogdの構成に追加します。/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
、-k
dmesgにそれぞれユーザーファシリティメッセージとカーネルファシリティメッセージのみを表示するように指示します。
これがクリンチャーです。デフォルトでは、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
これらのインターフェイスの1つから読み取り、glibc関数syslog()
を呼び出してsyslogにコピーします。rsyslogdはimklog
入力モジュールを介してこれらのインターフェースの1つを読み取りますが、知る限りではglibcを呼び出すことはありませんsyslog()
。imklog
他の入力モジュールからの出力を処理するのと同じように、単に出力を処理します。カーネルリングバッファーにあるファシリティメッセージに関係なくimklog
、すべての出力にkern
ファシリティがあるという追加の警告があります。
参照資料
dmesg
ここで説明するコンテキストなしでは意味がありませんでした。