Edit 2016-06-02
Jika Anda mencoba menemukan "pesan log baru" secara umum, periksa /var/log/upstart/. Di situlah Pemula menyimpan stdoutdan stderrdari layanan Pemula. Berkat jawaban leopd untuk menunjukkan ini.
Jika Anda mencari pesan log dari Pemula sendiri, yang dikonfigurasikan oleh initctl log-prioritydan dipancarkan oleh initctl emit, baca terus!
Versi pendek
Entri log seharusnya benar-benar muncul di dmesg. Meskipun begitu, mereka tidak muncul secara default di /var/log.
Jika Anda menginginkannya /var/logjuga, tambahkan $KLogPermitNonKernelFacility onke konfigurasi rsyslogd. Saya sarankan membuat file khusus /etc/rsyslog.d/60-custom.confuntuk menghindari pengeditan /etc/rsyslog.conf, karena itu dikelola oleh dpkg. Sekarang pesan Upstart harus muncul dalam /var/log/syslog, setelah Anda menetapkan Upstart ini log-priorityke infoatau lebih.
Versi panjang
Ini membutuhkan waktu berhari-hari untuk saya lacak, tetapi tampaknya Upstart (1.5) tidak masuk ke syslog, artinya, ia tidak memanggil fungsi glibc syslog(). Sebagai gantinya, Upstart log ke buffer ring kernel, yang dibaca dmesg. Sekarang, saya tidak berpikir itu mungkin untuk proses ruang pengguna untuk menulis ke buffer itu, tetapi tampaknya mereka bisa dengan menulis /dev/kmsg, dan itulah yang dilakukan oleh pemula. Jadi itu bagian pertama dari teka-teki.
Bagian kedua adalah bahwa ada kepercayaan luas bahwa pesan yang ditulis ke buffer ring kernel secara otomatis disalin ke syslog oleh kernel (setidaknya itulah yang selalu saya pikirkan). Ternyata ini sebenarnya dilakukan oleh daemon ruang pengguna, secara tradisional klogd, yang beroperasi bersama-sama dengan syslogd. Jelas rsyslogd menggantikan syslogd tetapi ternyata juga menggantikan klogd (semacam: lihat catatan di bagian akhir).
Bagian ketiga adalah bahwa pesan yang ditulis ke buffer cincin kernel dari ruang pengguna sebenarnya terlihat berbeda dari pesan yang ditulis dari ruang kernel: mereka memiliki fasilitas yang berbeda. dmesg memiliki beberapa opsi yang berinteraksi dengan ini: -xakan menampilkan fasilitas (dan prioritas), sementara -udan -kmemberi tahu dmesg untuk hanya menampilkan pesan fasilitas pengguna dan pesan fasilitas kernel.
Sekarang inilah yang menentukan: secara default, rsyslogd mengabaikan pesan dengan fasilitas non-kernel saat membaca pesan dari buffer cincin kernel. Opsi konfigurasi yang relevan adalah $KLogPermitNonKernelFacility, yang mati secara default dan perlu dihidupkan jika Anda ingin rsyslogd memproses pesan-pesan ini. Perhatikan bahwa sisa konfigurasi rsyslogd akan memperlakukan semua pesan dari buffer ring kernel sebagai memiliki kernfasilitas, terlepas dari fasilitas yang mereka miliki di buffer ring kernel.
Informasi lebih lanjut
syslog
Kode dapat menulis ke syslog dengan memanggil fungsi glibc syslog(), dijelaskan dalam man 3 syslog. Rupanya fungsi-fungsi ini menulis /dev/log. Kode dapat membaca dari syslog dengan membaca /dev/log, dan ini adalah apa syslogddan penggantiannya lakukan. rsyslogdmembaca /dev/logmenggunakan imuxsockmodul inputnya.
Buffer cincin kernel
Ruang kernel menulis ke buffer ini dengan memanggil fungsi kernel printk(), sehingga kadang-kadang disebut buffer printk. Ruang pengguna dapat menulis ke sana dengan menulis ke /dev/kmsg. Ruang pengguna dapat membaca dari buffer ini dengan beberapa metode: dapat membaca dari /proc/kmsg(apa yang dilakukan dmesg secara default), atau dapat membaca dari /dev/kmsg, atau dapat memanggil system call syslog(), yang dijelaskan dalam man 2 syslogdan benar - benar berbeda dari fungsi glibc yang syslog()dijelaskan di man 3 syslog. glibc sebenarnya menyediakan pembungkus untuk pemanggilan sistem syslog(), dipanggil klogctl(), untuk membantu meringankan kebingungan ini.
Secara tradisional, klogdmembaca dari salah satu antarmuka ini, lalu memanggil fungsi glibc syslog()untuk menyalinnya ke syslog. rsyslogd membaca salah satu antarmuka ini melalui imklogmodul inputnya tetapi AFAIK tidak repot-repot memanggil glibc syslog(), itulah sebabnya mengapa tidak persis seperti klogd; itu hanya memproses keluaran imklogsama seperti memproses keluaran dari modul input lainnya. Ada peringatan tambahan bahwa semua imklogoutput memiliki kernfasilitas terlepas dari pesan-pesan fasilitas yang ada di buffer ring kernel.
Referensi
dmesgtetapi tidak masuk akal tanpa konteks yang diberikan di sini.