Czy jest jakiś sposób na utworzenie pliku dziennika do przechowywania niektórych danych w / var / log / przy pomocy funkcji biblioteki lub wywołania systemowego w języku c w systemie Linux? Chcę też poznać standardy, których powinniśmy przestrzegać przy pisaniu i przetwarzaniu dziennika. Dzięki
22
Odpowiedzi:
Standardowym sposobem logowania z programu w języku C. jest
syslog
.Zacznij od dołączenia pliku nagłówka:
Następnie na początku programu powinieneś skonfigurować syslog, wywołując
openlog
:Pierwszym argumentem jest identyfikator lub znacznik, który jest automatycznie dodawany na początku każdej wiadomości. Wpisz tutaj nazwę swojego programu.
Drugi argument to opcje, których chcesz użyć lub
0
normalne zachowanie. Pełna lista opcji znajduje się wman 3 syslog
. Przydatnym może być toLOG_PID
, że syslog zapisuje również identyfikator procesu w komunikacie dziennika.Następnie za każdym razem, gdy chcesz napisać dziennik, wywołujesz
syslog
:Pierwszy argument jest priorytetem. Zakresy pierwszeństwo z
DEBUG
(najmniej ważne) doEMERG
(tylko w nagłych przypadkach) zDEBUG
,INFO
iERR
są najczęściej używane. Sprawdźman 3 syslog
dostępne opcje.Drugi i trzeci argument to format i komunikat, podobnie jak printf.
To, w którym pliku dziennika się pojawi, zależy od ustawień syslog.
Przy domyślnej konfiguracji prawdopodobnie wchodzi
/var/log/messages
.Możesz skonfigurować niestandardowy plik dziennika, korzystając z jednego z urządzeń w zakresie
LOG_LOCAL0
odLOG_LOCAL7
.Korzystasz z nich, zmieniając:
do
lub
itp.
i dodając odpowiedni wpis
/etc/syslog.conf
, npi zrestartowanie serwera syslog, np
.info
Częśćlocal1.info
Powyższe oznacza, że wszystkie wiadomości, które sąINFO
lub bardziej ważne będą rejestrowane, w tymINFO
,NOTICE
,ERR
(błąd),CRIT
(krytyczna), itd., Ale nieDEBUG
.Lub, jeśli masz
rsyslog
, możesz wypróbować filtr oparty na właściwościach , npSyslogtag powinien zawierać „:”.
Lub, jeśli planujesz rozpowszechniać swoje oprogramowanie wśród innych osób, prawdopodobnie nie warto polegać na użyciu
LOG_LOCAL
lubrsyslog
filtrze.W takim przypadku powinieneś użyć
LOG_USER
(jeśli jest to normalny program) lubLOG_DAEMON
(jeśli jest to serwer), napisać komunikaty startowe i komunikaty o błędach za pomocąsyslog
, ale zapisać wszystkie komunikaty dziennika do pliku pozasyslog
. Na przykład Apache HTTPd loguje się do/var/log/apache2/*
lub/var/log/httpd/*
, jak zakładam, używając zwykłych wywołańopen
/fopen
iwrite
/printf
.źródło
rpm -qa | grep syslog
lubdpkg -l '*syslog*'
prawdopodobnie powie które.sysklogd
była jedyną grą w mieście dla oprogramowania syslog. Obecnie oprogramowanie, takie jaksyslog-ng
,rsyslog
adsyslog
istnieją i mają o wiele bardziej zaawansowane funkcje filtrowania niż tylko usługi / poziom.Będziesz chciał
#include <syslog.h>
, a następnie użyjsyslog()
funkcji, aby wysłać dane do dowolnego programu rejestrującego system, który jest aktywny.Zobacz stronę podręcznika tutaj .
źródło
Jest wiele możliwości, jaki masz plan? Czy potrzebujesz tylko opcji logowania z wiersza poleceń? Spójrz na
logger
(zawarte w bsdutils ). Po prostu wpisz:i zapisze coś takiego
/var/log/syslog
:patrz także
man logger
. W zależności od demona logowania możesz sortować te wiadomości według określonych plików lub filtrować je według priorytetów.Istnieją również rozwiązania dla różnych języków programowania, więc powiedz mi, co chcesz zrobić ;-)
źródło
Filtrowanie według nazwy programu jest napisane inaczej niż to, co wspomniano powyżej, dla najnowszych wersji
rsyslog
(wersja na moim komputerze to 5.8.6), jak pokazano poniżej:Aby uzyskać więcej informacji, spójrz tutaj
źródło