25 #include <qstmgesturedefs.h> |
25 #include <qstmgesturedefs.h> |
26 #include <QFile> |
26 #include <QFile> |
27 #include <QDebug> |
27 #include <QDebug> |
28 #include <QString> |
28 #include <QString> |
29 #include <QStringBuilder> |
29 #include <QStringBuilder> |
|
30 #include <QDateTime> |
|
31 #include <QTimer> |
30 |
32 |
31 #define LOGFLUSH QStm_FileLogger::flush() |
33 #define LOGFLUSH QStm_FileLogger::flush() |
32 #define LOGCLOSE QStm_FileLogger::close() |
34 #define LOGCLOSE QStm_FileLogger::close() |
33 #ifdef Q_OS_WIN |
35 #if defined(Q_OS_WIN) && defined(_MSC_VER) |
34 #define LOGARG() |
36 #define LOGARG() |
35 #else |
37 #else |
36 #define LOGARG(txt,parm...) {QStm_FileLogger::log(txt, parm);} |
38 #define LOGARG(txt,parm...) {QStm_FileLogger::log(txt, parm);} |
37 #endif |
39 #endif |
38 #define LOGTXT(txt) {QStm_FileLogger::log("%s",txt);} |
40 #define LOGTXT(txt) {QStm_FileLogger::log("%s",txt);} |
39 #define LOGERR(txt,err) if (!err) {} else {LOGARG(txt, err);} |
41 #define LOGERR(txt,err) if (!err) {} else {LOGARG(txt, err);} |
40 #define LOGCALL(exp) {LOGARG("Calling \"%s\"", #exp); exp; LOGARG("Call to \"%s\" passed.", #exp);} |
42 #define LOGCALL(exp) {LOGARG("Calling \"%s\"", #exp); exp; LOGARG("Call to \"%s\" passed.", #exp);} |
41 #define LOGENTER LOGARG("%s start", __PRETTY_FUNCTION__) |
43 #define LOGENTER LOGARG("%s start", __PRETTY_FUNCTION__) |
42 #define LOGEXIT LOGARG("%s end", __PRETTY_FUNCTION__) |
44 #define LOGEXIT LOGARG("%s end", __PRETTY_FUNCTION__) |
43 #define LOGMEM(ptr) LOGARG("%s [0x%x]", #ptr, (uint)ptr) |
45 #define LOGMEM(ptr) LOGARG("%s [0x%x]", #ptr, (uint)ptr) |
|
46 #define qstmDebug() QStm_FileLogger::logger()->isEnabled() ? QStm_FileLogger::debug() : QStm_FileLogger::noDebug() |
|
47 #define qstmIODevice() QStm_FileLogger::ioDevice() |
|
48 #define qstmEnableDebug(on) QStm_FileLogger::logger()->enable(on); |
44 |
49 |
45 class QSTMGESTURELIB_EXPORT QStm_FileLogger |
50 |
|
51 class QSTMGESTURELIB_EXPORT QStm_FileLogger : public QObject |
46 { |
52 { |
|
53 Q_OBJECT |
47 public: |
54 public: |
48 static void log(const QString& text); |
55 static void log(const QString& text); |
49 static void log(const char* fmt,...); |
56 static void log(const char* fmt,...); |
50 static void close() { logger()->doClose(); } |
57 static void close() { logger()->doClose(); } |
51 static void flush() { logger()->doFlush(); } |
58 static void flush() { logger()->doFlush(); } |
52 static QStm_FileLogger* logger(); |
59 static QStm_FileLogger* logger(); |
53 static QIODevice* ioDevice() { return logger()->m_file; } |
60 static QIODevice* ioDevice() { return logger()->m_file; } |
|
61 static QDebug debug(); |
|
62 static QNoDebug noDebug() { return *logger()->m_noDebug; } |
|
63 void enable(bool on); |
|
64 bool isEnabled() { return m_enabled; } |
54 private: |
65 private: |
55 QStm_FileLogger(); |
66 QStm_FileLogger(); |
56 ~QStm_FileLogger(); |
67 ~QStm_FileLogger(); |
57 void doLog(const QString& text); |
68 void doLog(const QString& text); |
58 void doLog(const char* text); |
69 void doLog(const char* text); |
59 void doClose() { m_file->close(); } |
70 void doClose() { if (m_file) m_file->close(); } |
60 void doFlush() { m_stream->flush(); } |
71 |
61 QString getLogFileName(); |
72 QString getLogFileName(); |
62 |
73 public slots: |
|
74 void doFlush(); |
63 private: |
75 private: |
64 QFile* m_file; |
76 QFile* m_file; |
65 QTextStream* m_stream; |
77 QTextStream* m_stream; |
66 static QStm_FileLogger* m_instance; |
78 static QStm_FileLogger* m_instance; |
|
79 bool m_enabled; |
|
80 QDebug* m_debug; |
|
81 QNoDebug* m_noDebug; |
|
82 QString* m_buffer; |
|
83 QTimer m_flushTimer; |
67 }; |
84 }; |
68 |
85 |
69 |
86 |
70 |
87 |
71 #endif /* QSTMFILELOGGER_H_ */ |
88 #endif /* QSTMFILELOGGER_H_ */ |