Cara standar untuk log dari program C adalah syslog.
Mulai dengan memasukkan file header:
#include <syslog.h>
Kemudian di awal program Anda, Anda harus mengkonfigurasi syslog dengan memanggil openlog:
openlog("programname", 0, LOG_USER);
Argumen pertama adalah identifikasi atau tag, yang secara otomatis ditambahkan pada awal setiap pesan. Masukkan nama program Anda di sini.
Argumen kedua adalah opsi yang ingin Anda gunakan, atau 0untuk perilaku normal. Daftar lengkap opsi ada di man 3 syslog. Salah satu yang mungkin berguna bagi Anda LOG_PID, yang membuat syslog juga merekam proses id dalam pesan log.
Kemudian, setiap kali Anda ingin menulis pesan log, Anda menelepon syslog:
syslog(LOG_INFO, "%s", "Message");
Argumen pertama adalah prioritas. Rentang prioritas dari DEBUG(paling tidak penting) ke EMERG(hanya untuk keadaan darurat) dengan DEBUG, INFO, dan ERRyang paling umum digunakan. Lihat man 3 syslogopsi Anda.
Argumen kedua dan ketiga adalah format dan pesan, seperti printf.
File log ini muncul tergantung pada pengaturan syslog Anda.
Dengan pengaturan default, mungkin masuk ke /var/log/messages.
Anda dapat mengatur file log khusus dengan menggunakan salah satu fasilitas dalam kisaran LOG_LOCAL0ke LOG_LOCAL7.
Anda menggunakannya dengan mengubah:
openlog("programname", 0, LOG_USER);
untuk
openlog("programname", 0, LOG_LOCAL0);
atau
openlog("programname", 0, LOG_LOCAL1);
dll.
dan menambahkan entri yang sesuai /etc/syslog.conf, misalnya
local1.info /var/log/programname.log
dan memulai kembali server syslog, mis
pkill -HUP syslogd
The .infobagian dari local1.infoatas berarti bahwa semua pesan yang INFOatau lebih penting akan login, termasuk INFO, NOTICE, ERR(error), CRIT(kritis), dll, tapi tidak DEBUG.
Atau, jika sudah rsyslog, Anda bisa mencoba filter berbasis properti , mis
:syslogtag, isequal, "programname:" /var/log/programname.log
Syslogtag harus mengandung ":".
Atau, jika Anda berencana mendistribusikan perangkat lunak Anda kepada orang lain, mungkin itu bukan ide yang baik untuk mengandalkan penggunaan LOG_LOCALatau rsyslogfilter.
Dalam hal ini, Anda harus menggunakan LOG_USER(jika ini adalah program normal) atau LOG_DAEMON(jika itu server), menulis pesan startup Anda dan menggunakan pesan kesalahan syslog, tetapi tulis semua pesan log Anda ke file di luar syslog. Sebagai contoh, Apache HTTPd mencatat /var/log/apache2/*atau /var/log/httpd/*, saya berasumsi menggunakan panggilan reguler open/ fopendan write/ printf.