GNU/Linux >> Znalost Linux >  >> Linux

vytvořit soubor protokolu

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.


Linux
  1. Provést `vyjmout` Změnit soubor na místě?

  2. Jaký je pohodlný způsob kontroly toho, co se přidává do souboru protokolu v reálném čase?

  3. Najít soubor protokolu Firefoxu?

  1. Jak vyprázdnit soubor protokolu v Linuxu

  2. Jak udělat soubor řídký?

  3. Jak zkontrolovat syslog v Bash na Linuxu?

  1. Změna formátu data v syslog

  2. Zachyťte výstup nethogs do souboru protokolu

  3. Log rotace stdout?