i want implement logger application, therefore created class myapplogger derived qmessagelogger.
let assume have several other classes implemented in qt myapp project:
- mainwidget : qwidget
- helpdialog :qdialog
- calculatenumers
how can provide logger of classes, without creating 3 loggers? use singleton mechanism. i've read singletons bad programming technique!?
here created simple project 2 empty dialogs. have myapplogger, shall create formated strings like:
[myapp] info 12:12:00:123[ms]_12.12.2012) object 'mycalculator'created @ 0xdeadbeef
[myapp] fatal 12:12:00:123[ms]_12.12.2012) crash @ function 'divisiondouble'
of cource required correct parameters (currentsystemtimeinmillis(), funtionname, etc, ...)
example logger, imagine there lot of other classes, should able use void info(...), debug(...), critical(...), fatal(...); etc. header:
#ifndef myapplogger_h #define myapplogger_h #include <qstring> #include <qfile> class myapplogger { public: myapplogger(qstring outputfile); void info(char* expression); void debug(char* expression); void critical(char* expression); void fatal(char* expression); private: qfile * _debugfile; }; #endif // myapplogger_h and corresponding src:
#include "myapplogger.h" myapplogger::myapplogger(qstring outputfile) { _debugfile = new qfile(outputfile); } void myapplogger::critical(char *expression) { qstring line("[myapp] \t critical \t sys_time (12:45:00_12.12.2012) :: "); line.append(expression); // write line file // write line std output }
from see want achieve 2 things:
change output format of logging output.
should consider using qsetmessagepattern that.write logging output file:
subclassing qmessagelogger not required. use qinstallmessagehandler install custom handler , write log messages file.
using 2 methods has advantage can use qt's own debug macros (qdebug(), qfatal() ...) , don't need write own messagelogger or think singletons.
Comments
Post a Comment