Apakah ada cara untuk membuat file log untuk mempertahankan beberapa data di / var / log / dengan bantuan beberapa fungsi pustaka atau system call dalam bahasa c di linux. Dan saya juga ingin tahu standar yang harus kita ikuti untuk menulis dan memproses log. Terima kasih
22
Jawaban:
Cara standar untuk log dari program C adalah
syslog
.Mulai dengan memasukkan file header:
Kemudian di awal program Anda, Anda harus mengkonfigurasi syslog dengan memanggil
openlog
: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 diman 3 syslog
. Salah satu yang mungkin berguna bagi AndaLOG_PID
, yang membuat syslog juga merekam proses id dalam pesan log.Kemudian, setiap kali Anda ingin menulis pesan log, Anda menelepon
syslog
:Argumen pertama adalah prioritas. Rentang prioritas dari
DEBUG
(paling tidak penting) keEMERG
(hanya untuk keadaan darurat) denganDEBUG
,INFO
, danERR
yang paling umum digunakan. Lihatman 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
keLOG_LOCAL7
.Anda menggunakannya dengan mengubah:
untuk
atau
dll.
dan menambahkan entri yang sesuai
/etc/syslog.conf
, misalnyadan memulai kembali server syslog, mis
The
.info
bagian darilocal1.info
atas berarti bahwa semua pesan yangINFO
atau lebih penting akan login, termasukINFO
,NOTICE
,ERR
(error),CRIT
(kritis), dll, tapi tidakDEBUG
.Atau, jika sudah
rsyslog
, Anda bisa mencoba filter berbasis properti , misSyslogtag harus mengandung ":".
Atau, jika Anda berencana mendistribusikan perangkat lunak Anda kepada orang lain, mungkin itu bukan ide yang baik untuk mengandalkan penggunaan
LOG_LOCAL
ataursyslog
filter.Dalam hal ini, Anda harus menggunakan
LOG_USER
(jika ini adalah program normal) atauLOG_DAEMON
(jika itu server), menulis pesan startup Anda dan menggunakan pesan kesalahansyslog
, tetapi tulis semua pesan log Anda ke file di luarsyslog
. Sebagai contoh, Apache HTTPd mencatat/var/log/apache2/*
atau/var/log/httpd/*
, saya berasumsi menggunakan panggilan reguleropen
/fopen
danwrite
/printf
.sumber
rpm -qa | grep syslog
ataudpkg -l '*syslog*'
mungkin akan memberitahu Anda yang mana.sysklogd
itu satu-satunya permainan di kota untuk perangkat lunak syslog. Saat ini perangkat lunak sukasyslog-ng
,rsyslog
dandsyslog
ada dan memiliki kemampuan penyaringan yang jauh lebih canggih dari sekadar layanan / level.Anda ingin
#include <syslog.h>
, kemudian menggunakansyslog()
fungsi untuk mengirim data ke program logging sistem apa pun yang aktif.Lihat halaman manual di sini .
sumber
Ada banyak kemungkinan, apa rencanamu? Apakah Anda hanya perlu opsi untuk masuk dari baris perintah? Lihatlah
logger
(termasuk dalam bsdutils ). Ketik saja:dan itu akan mencatat sesuatu seperti ini untuk Anda
/var/log/syslog
:lihat juga
man logger
. Bergantung pada daemon logging Anda, Anda dapat mengurutkan pesan-pesan ini ke file tertentu atau memfilternya berdasarkan prioritas.Ada juga beberapa solusi untuk berbagai bahasa pemrograman, jadi tolong beri tahu saya apa yang ingin Anda lakukan ;-)
sumber
Pemfilteran menurut nama program ditulis berbeda dari yang disebutkan di atas, untuk versi terbaru
rsyslog
(versi pada mesin saya adalah 5.8.6) seperti yang ditunjukkan di bawah ini:Untuk info lebih lanjut, lihat di sini
sumber