[Champmodel] Logging

Zoltán Borók-Nagy zoltan.borok-nagy at ericsson.com
Wed Apr 3 16:13:36 CEST 2013


Sziasztok!

A múltkor felmerült a loggolás kérdése. Én régebben írtam egy loggert, amit most header-onlyvá alakítottam és CodeCompass-osítottam.
Feltöltöttem a sandbox/streamlog könyvtárba.

Feature-ök:
- header-only, méghozzá 1 db header-fájl
- operator<< használható logüzenetek írására
- thread-safe
- 5 log-level: DEBUG, INFO, WARNING, ERROR, CRITICAL
- fájlnév és sorszám bekerül az üzenetbe (__FILE__, __LINE__)
- alapértelmezetten stderror-ba ír, de megadható neki tetszőleges fájl is
- logüzenetek prefixének megadható komponens és szubkomponens
- NO_LOGGING define-olásával kikapcsolható a teljes logolás, gyakorlatilag semmiféle runtime költsége nem lesz ilyenkor

Használat:

A main elején opcionálisan konfigurálható néhány statikus metódus segítségével (ezek a műveletek nem thread-safe-ek):
    CodeCompass::StreamLog::setFile("log.log"); // default módon stderr-be logol
    CodeCompass::StreamLog::initialize("Component", "SubComponent"); // default prefix üres string
    CodeCompass::StreamLog::setLogLevel(CodeCompass::INFO); // default loglevel DEBUG

Utána a használat pedig így néz ki:

SLog() << "Debug üzenet " << 43434 << std::endl;
SLog(CodeCompass::WARNING) << a << " Üzenet " << d << 2.2345 << std::endl;

Szvsz jobb lenne ezt használni loggolásra, mint az std::cerr-t, már csak a szálbiztosság miatt is.

Üdv,
    Zoli






More information about the Champmodel mailing list