Øvelse+9.1+-+Logging

Exercise 1
Extend the already completed exercise 8 with logging. Different log levels should be used, discuss which levels you have used.

Syslog indeholder følgende loglevels

"EMG", - Emergency "ALT", - Alert "CRT", - Critical "ERR", - Error "WRN", - Warning "NOT", - Notification "INF", - Information "DBG" - Debug

Til øvelsen valgte vi
 * 0: Emergency, advarsler, hvor systemet ikke kan køre
 * 1: Alert, kritisk, systemet vil muligvis kunne kører videre i stærkt forringet tilstand
 * 2: Warning, systemet vil kunne kører videre med få eller ingen mærkbare forringelser
 * 3: Informational, bruges til at skrive information ud, som fx debugdata

Exercise 2
Analyse the log framework implementation, and present a short description on what happens when an appli- cation calls the OSAPI_LOG_XXX (XXX could be DBG, CRT, ALT, INF etc.) macro to write some log. Dis- cuss the chosen approach, what do you appreciate and what do you not.

Forklaring af macro code format="c" std::stringstream ss; \ ss << __VA_ARGS__; \ osapi::details::LogSystem::getInstance->log(__FILE__, __LINE__, __FUNCTION__, lvl, ss); \ } while(0) code Med stringstream gøres sådan at man kan skrive til en string med stream operatoren
 * 1) define LOG(lvl, ...) do { \

getInstance funktionen bruges, da det er en singleton klasse, og returnere bare en pointer.

Alt i alt betyder det at vi kan føre log således:

code format="c" OSAPI_LOG_EMG("An emergency has ocurred - id: " << id) code

Exercise 3
Implement an output plugin such that log is written directly to the syslog. The solution created in exercise must be extended with this implementation, such that it writes its log to sys- log instead of stdout. Verify that this also works on the target.

Der tages udgangspunkt i klassen ILogStdOut, som nedarver fra iLogOut men implementerer log funktionen til at skrive til std out. Der laves nu en ny nedarvet klasse som også arver fra iLogOut og men med sin egen implementering af log funktionen.

Dog kræver syslog lidt mere en std out, b.la. et loglevel

Kommandoen openlog bruges til at åbne loggen: code format="cpp" openlog ("iLogSysLog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); code

Herefter skrives med syslog: code syslog (LOG_NOTICE, "Program started by User %d", getuid ); syslog (LOG_INFO, "Farten holdes!"); code

slutteligt bruges close til at lukke loggen igen: code format="cpp" closelog ; code


 * Erfaringer:** Efter øvelsen har vi et fuldt funktionsdygtigt log framework, som kan bruges til at skrive ud til sysloggen, dette kan viser sig at være meget anvendeligt i både semesterprojekt men også til mange andre øvelser. På den måde slipper vi for couts til debugging og har på den måde mulighed for at undersøge tilstanden af vores program på en smuk og virksom måde.