c++ - QMessageLogger : Singleton for a Logger? -


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:

  1. change output format of logging output.
    should consider using qsetmessagepattern that.

  2. 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