00001 #ifndef LOGGING_H
00002 #define LOGGING_H
00003 #include <QxtCore>
00004 #include <QSqlDatabase>
00005 #include <QList>
00006 #include <QVariant>
00018 #include <QSqlQuery>
00019 #include <QDateTime>
00020 #include <QxtLoggerEngine>
00021
00022
00023
00024 #define LM QString("%1[%2][%3]").arg(__FILE__).arg(__FUNCTION__).arg(__LINE__)
00025 #define LOGT QList<QVariant> () << LM
00026
00036 inline void initialiseLogging(QString logFileName)
00037 {
00038 qxtLog-> addLoggerEngine ( "FileLog" , new QxtBasicFileLoggerEngine (QString("%1.log").arg(logFileName)));
00039 qxtLog->initLoggerEngine("FileLog");
00040
00041 qxtLog-> enableLogLevels ( "FileLog" , QxtLogger::FatalLevel );
00042 qxtLog-> enableLogLevels ( "FileLog" , QxtLogger::CriticalLevel );
00043 qxtLog-> enableLogLevels ( "FileLog" , QxtLogger::ErrorLevel );
00044 qxtLog-> enableLogLevels ( "FileLog" , QxtLogger::WarningLevel );
00045 qxtLog-> disableLogLevels ( "FileLog" , QxtLogger::TraceLevel );
00046 qxtLog-> disableLogLevels ( "FileLog" , QxtLogger::DebugLevel);
00047
00048 }
00049
00050
00051 #define LOG_DEC(s) \
00052 qxtLog-> addLoggerEngine ( #s"Log" , new QxtBasicFileLoggerEngine (QString("%1/%2.log").arg(f).arg(#s))); \
00053 qxtLog->initLoggerEngine(#s"Log");
00054
00055
00067 class DatabaseLogger : public QxtLoggerEngine
00068 {
00069 QString _dbname;
00070 QString _loggerName;
00071 QString _tableName;
00072 public:
00073
00074
00083 DatabaseLogger(QString databaseName, QString logFileName, QString tableName) :
00084 _dbname(databaseName),_loggerName(logFileName),_tableName(tableName)
00085 {
00086
00087 }
00093 virtual void createTable()
00094 {
00095 QSqlDatabase db = QSqlDatabase::database(_dbname,true);
00096 db.exec(
00097 QString(
00098 "CREATE TABLE %1 IFNOTEXIST (LOG_TIMESTAMP DATETIME DEFAULT CURRENT_TIMESTAMP,"
00099 "LOG_LEVEL CHAR(16) DEFAULT 'InfoLevel',"
00100 "LOG_MESSAGE VARCHAR(512)"
00101 ");"
00102 ).arg(_tableName));
00103 }
00104
00105
00111 virtual void initLoggerEngine(){}
00112
00118 virtual void killLoggerEngine(){}
00125 virtual bool isInitialized() const { return true;}
00126
00133 QString dbname() const {return _dbname;}
00134
00141 QString loggerName() const { return _loggerName;}
00142
00150 virtual void writeFormatted(QxtLogger::LogLevel level, const QList<QVariant>& msgs);
00151 };
00152
00153
00159 class LoggerLink : public QObject
00160 {
00161 Q_OBJECT
00162 public:
00169 LoggerLink(QObject *parent = 0) : QObject(parent){};
00170 public slots:
00178 void logOutput(QString level, QString msg) {emit log(level,msg);}
00179 signals:
00187 void log(QString level, QString msg);
00188 };
00189
00195 class GuiLogger : public QxtLoggerEngine
00196 {
00197 LoggerLink _link;
00198 public:
00204 GuiLogger(){}
00210 virtual void initLoggerEngine(){};
00216 virtual void killLoggerEngine(){} ;
00223 virtual bool isInitialized() const { return true;}
00231 virtual void writeFormatted(QxtLogger::LogLevel level, const QList<QVariant>& msgs)
00232 {
00233 QStringList l;
00234 l << QDateTime::currentDateTime().toString(Qt::ISODate);
00235 for(int i = 0; i < msgs.count(); ++i) l << msgs[i].toString();
00236 _link.logOutput(QxtLogger::logLevelToString ( level ),l.join(" "));
00237 }
00244 const LoggerLink * link() const { return &_link;}
00245 };
00246
00247 #endif // LOGGING_H