[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