Cara standar untuk masuk dari program C adalah syslog
.
Mulailah dengan menyertakan file header:
#include <syslog.h>
Kemudian di awal program Anda, Anda harus mengonfigurasi syslog dengan memanggil openlog
:
openlog("programname", 0, LOG_USER);
Argumen pertama adalah identifikasi atau tag, yang ditambahkan secara otomatis di awal setiap pesan. Cantumkan nama program Anda di sini.
Argumen kedua adalah opsi yang ingin Anda gunakan, atau 0
untuk perilaku normal. Daftar lengkap opsi ada di man 3 syslog
. Yang mungkin berguna bagi Anda adalah LOG_PID
, yang membuat syslog juga merekam id proses dalam pesan log.
Kemudian, setiap kali Anda ingin menulis pesan log, panggil 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 ERR
menjadi yang paling umum digunakan. Lihat man 3 syslog
untuk opsi Anda.
Argumen kedua dan ketiga adalah format dan pesan, seperti printf.
Di file log mana ini muncul tergantung pada pengaturan syslog Anda.
Dengan pengaturan default, mungkin masuk ke /var/log/messages
.
Anda dapat mengatur file log kustom dengan menggunakan salah satu fasilitas dalam rentang LOG_LOCAL0
ke 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 ke /etc/syslog.conf
, mis.
local1.info /var/log/programname.log
dan memulai ulang server syslog, mis.
pkill -HUP syslogd
.info
bagian dari local1.info
di atas berarti semua pesan yang INFO
atau lebih penting akan dicatat, termasuk INFO
, NOTICE
, ERR
(kesalahan), CRIT
(kritis), dll., tetapi bukan DEBUG
.
Atau, jika Anda memiliki rsyslog
, Anda dapat mencoba filter berbasis properti, mis.
:syslogtag, isequal, "programname:" /var/log/programname.log
Tag syslog harus berisi ":".
Atau, jika Anda berencana untuk mendistribusikan perangkat lunak Anda ke orang lain, sebaiknya jangan mengandalkan penggunaan LOG_LOCAL
atau rsyslog
menyaring.
Dalam hal ini, Anda harus menggunakan LOG_USER
(jika itu adalah program normal) atau LOG_DAEMON
(jika server), tulis pesan startup dan pesan kesalahan Anda menggunakan syslog
, tetapi tulis semua pesan log Anda ke file di luar syslog
. Misalnya, Apache HTTPd mencatat ke /var/log/apache2/*
atau /var/log/httpd/*
, saya berasumsi menggunakan open
biasa /fopen
dan write
/printf
panggilan.
Anda ingin #include <syslog.h>
, lalu gunakan syslog()
berfungsi untuk mengirim data ke program logging sistem apa pun yang aktif.
Lihat halaman manualnya di sini.