Standardní způsob přihlášení z programu C je syslog
.
Začněte zahrnutím souboru záhlaví:
#include <syslog.h>
Na začátku vašeho programu byste měli nakonfigurovat syslog voláním openlog
:
openlog("programname", 0, LOG_USER);
Prvním argumentem je identifikace nebo značka, která je automaticky přidána na začátek každé zprávy. Sem zadejte název programu.
Druhým argumentem jsou možnosti, které chcete použít, neboli 0
pro normální chování. Úplný seznam možností je v man 3 syslog
. Jeden, který by se vám mohl hodit, je LOG_PID
, což způsobí, že syslog také zaznamená ID procesu do zprávy protokolu.
Potom pokaždé, když chcete napsat zprávu protokolu, zavoláte syslog
:
syslog(LOG_INFO, "%s", "Message");
První argument je priorita. Priorita se pohybuje od DEBUG
(nejméně důležité) na EMERG
(pouze v případě nouze) s DEBUG
, INFO
a ERR
je nejčastěji používaný. Viz man 3 syslog
pro vaše možnosti.
Druhý a třetí argument jsou formát a zpráva, stejně jako printf.
V jakém souboru protokolu se to zobrazí, závisí na vašem nastavení syslog.
S výchozím nastavením to pravděpodobně přejde do /var/log/messages
.
Vlastní soubor protokolu můžete nastavit pomocí jedné z funkcí v rozsahu LOG_LOCAL0
na LOG_LOCAL7
.
Můžete je použít změnou:
openlog("programname", 0, LOG_USER);
do
openlog("programname", 0, LOG_LOCAL0);
nebo
openlog("programname", 0, LOG_LOCAL1);
atd.
a přidání odpovídajícího záznamu do /etc/syslog.conf
, např.
local1.info /var/log/programname.log
a restartování serveru syslog, např.
pkill -HUP syslogd
.info
část local1.info
výše znamená, že všechny zprávy, které jsou INFO
nebo důležitější budou zaznamenány, včetně INFO
, NOTICE
, ERR
(chyba), CRIT
(kritické) atd., ale ne DEBUG
.
Nebo, pokud máte rsyslog
, můžete zkusit filtr založený na vlastnostech, např.
:syslogtag, isequal, "programname:" /var/log/programname.log
Syslogtag by měl obsahovat ":".
Nebo, pokud plánujete distribuovat svůj software dalším lidem, pravděpodobně není dobrý nápad spoléhat se na použití LOG_LOCAL
nebo rsyslog
filtr.
V takovém případě byste měli použít LOG_USER
(pokud je to normální program) nebo LOG_DAEMON
(pokud se jedná o server), pište zprávy při spuštění a chybové zprávy pomocí syslog
, ale zapisujte všechny zprávy protokolu do souboru mimo syslog
. Například Apache HTTPd se přihlásí na /var/log/apache2/*
nebo /var/log/httpd/*
, předpokládám, že pomocí běžného open
/fopen
a write
/printf
hovory.
Budete chtít #include <syslog.h>
a poté použijte syslog()
funkce pro odesílání dat do jakéhokoli aktivního programu pro protokolování systému.
Viz manuálovou stránku zde.