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 0
untuk 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 ERR
yang paling umum digunakan. Lihat man 3 syslog
opsi 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_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 /etc/syslog.conf
, misalnya
local1.info /var/log/programname.log
dan memulai kembali server syslog, mis
pkill -HUP syslogd
The .info
bagian dari local1.info
atas berarti bahwa semua pesan yang INFO
atau 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_LOCAL
atau rsyslog
filter.
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
/ fopen
dan write
/ printf
.