Tegenwoordig slaan de meeste applicatie- en systeemapplicaties periodiek informatie over het proces van hun werk, fouten en storingen op in speciale logboeken die logboeken worden genoemd. De meeste algemene besturingssystemen bieden services waarmee u logboeken kunt schrijven met behulp van een standaard programmeerinterface.
Noodzakelijk
- - C-compiler;
- - Windows Platform-SDK;
- - Ontwikkelen pakket voor glibc.
instructies:
Stap 1
Voeg ondersteuning toe voor het schrijven van logboeken naar het systeemlogboek van uw toepassing die is ontworpen om te werken onder besturingssystemen van de Windows-familie.
Gebruik de RegisterEventSource API-functie om de toepassing te registreren als een gebeurtenisbron, de ReportEvent-functie om een item aan het logboek toe te voegen en de DeregisterEventSource-functie om de door RegisterEventSource geretourneerde ingang te sluiten.
Het is logisch om RegisterEventSource aan te roepen tijdens de initialisatie van de applicatie en de geretourneerde descriptor de hele tijd op te slaan, zodat items in het logboek vanaf verschillende plaatsen in het programma kunnen worden geplaatst. Het eenvoudigste voorbeeld van schrijven naar het Windows-logboek kan er als volgt uitzien:
HANDLE hLog = RegisterEventSource (NULL, "MyApplicationName");
if (hLog! = NULL)
{
if (ReportEvent (hLog, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, "Berichttekst / 0", NULL))
{
// gebeurtenis is succesvol gelogd
}
DeregisterEventSource (hLog);
}
Meer details over de semantiek van de ReportEvent-functie zijn te vinden in MSDN op https://msdn.microsoft.com/en-us/library/windows/desktop/aa363679%28v=vs.85%29.aspx. Bovendien moet u wat gegevens over de uitvoerbare module van de toepassing in het systeemregister plaatsen en bronnen in een specifiek formaat toevoegen aan de module zelf of een dynamische bibliotheek van derden. Zie https://msdn.microsoft.com/en-us/library/windows/desktop/aa363661%28v=vs.85%29.aspx voor meer informatie over de registersleutels voor de gebeurtenislogboekservice.
Stap 2
Inloggen op Linux-compatibele besturingssystemen kan meestal met behulp van de syslog-daemon. Deze service heeft een interface op applicatieniveau in de vorm van een set functies, waarvan de declaraties in het headerbestand syslog.h worden geplaatst.
Gebruik de openlog-functie om een verbinding met de syslog-service te maken vanuit een toepassing of bibliotheek. Roep de functies syslog of vsyslog aan om berichten in het logboek te plaatsen. Na het einde van het opnemen van gebeurtenissen of wanneer de toepassing wordt afgesloten, sluit u de verbinding met de service door de closelog-functie aan te roepen. Daarnaast kunt u de instellingen configureren om oproepen te negeren die gebeurtenisrecords met een specifieke prioriteit toevoegen met behulp van de setlogmask-functie. Een voorbeeld van het schrijven van berichten naar het logboek kan er als volgt uitzien:
openlog ("Mijn Toepassing", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, "Mijn toepassing wordt gestart met PID% d", getuid ());
syslog (LOG_INFO, "Informatiebericht!");
afsluiten ();
Zie de libc info-documentatie voor meer informatie over de parameters van de syslog API-functies.
Stap 3
Schrijf logboeken naar willekeurige bestanden met uw eigen implementatie van het gebeurtenispersistentie-subsysteem. Een van de eenvoudigste oplossingen voor dit probleem is om verschillende functies in het globale bereik te creëren, waarvan er één een bestand opent met een specifieke naam in de modus Informatie toevoegen, de tweede het sluit en de derde een berichtreeks toevoegt die eraan wordt doorgegeven als een parameter voor dit bestand. Conceptueel lijkt deze oplossing op de syslog-programmeerinterface in Linux.
Gebruik de fopen- en fclose-functies van de C-standaardbibliotheek om respectievelijk een bestand te openen en te sluiten. Bel fwrite om informatie aan het bestand toe te voegen. U kunt ook platformspecifieke functies gebruiken (bijvoorbeeld CreateFile onder Windows) en methoden van objecten van de gebruikte frameworks die de functionaliteit van het werken met bestanden inkapselen.