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.