diff options
Diffstat (limited to 'rbutil/rbutilqt/systrace.cpp')
-rw-r--r-- | rbutil/rbutilqt/systrace.cpp | 108 |
1 files changed, 45 insertions, 63 deletions
diff --git a/rbutil/rbutilqt/systrace.cpp b/rbutil/rbutilqt/systrace.cpp index dc8534af03..5e42e1b2d8 100644 --- a/rbutil/rbutilqt/systrace.cpp +++ b/rbutil/rbutilqt/systrace.cpp | |||
@@ -22,10 +22,8 @@ | |||
22 | #include "ui_systracefrm.h" | 22 | #include "ui_systracefrm.h" |
23 | 23 | ||
24 | #include "rbsettings.h" | 24 | #include "rbsettings.h" |
25 | #include "Logger.h" | ||
25 | 26 | ||
26 | QString SysTrace::debugbuffer; | ||
27 | QString SysTrace::lastmessage; | ||
28 | unsigned int SysTrace::repeat = 0; | ||
29 | 27 | ||
30 | SysTrace::SysTrace(QWidget *parent) : QDialog(parent) | 28 | SysTrace::SysTrace(QWidget *parent) : QDialog(parent) |
31 | { | 29 | { |
@@ -43,7 +41,28 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent) | |||
43 | void SysTrace::refresh(void) | 41 | void SysTrace::refresh(void) |
44 | { | 42 | { |
45 | int pos = ui.textTrace->verticalScrollBar()->value(); | 43 | int pos = ui.textTrace->verticalScrollBar()->value(); |
46 | flush(); | 44 | |
45 | QString debugbuffer; | ||
46 | QFile tracefile(QDir::tempPath() + "/rbutil-trace.log"); | ||
47 | tracefile.open(QIODevice::ReadOnly); | ||
48 | QTextStream c(&tracefile); | ||
49 | QString line; | ||
50 | QString color; | ||
51 | while(!c.atEnd()) { | ||
52 | line = c.readLine(); | ||
53 | if(line.contains("WARNING")) | ||
54 | color = "orange"; | ||
55 | else if(line.contains("ERROR")) | ||
56 | color = "red"; | ||
57 | #if 0 | ||
58 | else if(line.contains("INFO")) | ||
59 | color = "green"; | ||
60 | #endif | ||
61 | else | ||
62 | color = "black"; | ||
63 | debugbuffer += QString("<div style='color:%1;'>%2</div>").arg(color, line); | ||
64 | } | ||
65 | tracefile.close(); | ||
47 | ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); | 66 | ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); |
48 | ui.textTrace->verticalScrollBar()->setValue(pos); | 67 | ui.textTrace->verticalScrollBar()->setValue(pos); |
49 | QString oldlog = RbSettings::value(RbSettings::CachePath).toString() | 68 | QString oldlog = RbSettings::value(RbSettings::CachePath).toString() |
@@ -52,23 +71,26 @@ void SysTrace::refresh(void) | |||
52 | } | 71 | } |
53 | 72 | ||
54 | 73 | ||
74 | QString SysTrace::getTrace(void) | ||
75 | { | ||
76 | QString debugbuffer; | ||
77 | QFile tracefile(QDir::tempPath() + "/rbutil-trace.log"); | ||
78 | tracefile.open(QIODevice::ReadOnly); | ||
79 | QTextStream c(&tracefile); | ||
80 | debugbuffer = c.readAll(); | ||
81 | tracefile.close(); | ||
82 | |||
83 | return debugbuffer; | ||
84 | } | ||
85 | |||
86 | |||
55 | void SysTrace::save(QString filename) | 87 | void SysTrace::save(QString filename) |
56 | { | 88 | { |
57 | if(filename.isEmpty()) | 89 | if(filename.isEmpty()) |
58 | filename = RbSettings::value(RbSettings::CachePath).toString() | ||
59 | + "/rbutil-trace.log"; | ||
60 | // make sure any repeat detection is flushed | ||
61 | flush(); | ||
62 | // append save date to the trace. Append it directly instead of using | ||
63 | // qDebug() as the handler might have been unregistered. | ||
64 | debugbuffer.append("[SysTrace] saving trace at "); | ||
65 | debugbuffer.append(QDateTime::currentDateTime().toString(Qt::ISODate)); | ||
66 | debugbuffer.append("\n"); | ||
67 | QFile fh(filename); | ||
68 | if(!fh.open(QIODevice::WriteOnly)) | ||
69 | return; | 90 | return; |
70 | fh.write(debugbuffer.toUtf8(), debugbuffer.size()); | 91 | LOG_INFO() << "saving trace at" << QDateTime::currentDateTime().toString(Qt::ISODate); |
71 | fh.close(); | 92 | QFile::copy(QDir::tempPath() + "/rbutil-trace.log", filename); |
93 | |||
72 | } | 94 | } |
73 | 95 | ||
74 | void SysTrace::saveCurrentTrace(void) | 96 | void SysTrace::saveCurrentTrace(void) |
@@ -87,59 +109,19 @@ void SysTrace::savePreviousTrace(void) | |||
87 | if(fp.isEmpty()) | 109 | if(fp.isEmpty()) |
88 | return; | 110 | return; |
89 | 111 | ||
90 | QString oldlog = RbSettings::value(RbSettings::CachePath).toString() | 112 | QString oldlog = QDir::tempPath() + "/rbutil-trace.log.1"; |
91 | + "/rbutil-trace.log"; | ||
92 | QFile::copy(oldlog, fp); | 113 | QFile::copy(oldlog, fp); |
93 | return; | 114 | return; |
94 | } | 115 | } |
95 | 116 | ||
96 | #if QT_VERSION < 0x050000 | ||
97 | void SysTrace::debug(QtMsgType type, const char* msg) | ||
98 | { | ||
99 | (void)type; | ||
100 | if(lastmessage != msg) { | ||
101 | lastmessage = msg; | ||
102 | flush(); | ||
103 | debugbuffer.append(QString::fromLocal8Bit(msg) + "\n"); | ||
104 | #if !defined(NODEBUG) | ||
105 | fprintf(stderr, "%s\n", msg); | ||
106 | #endif | ||
107 | repeat = 1; | ||
108 | } | ||
109 | else { | ||
110 | repeat++; | ||
111 | } | ||
112 | } | ||
113 | #else | ||
114 | void SysTrace::debug(QtMsgType type, const QMessageLogContext &context, const QString &msg) | ||
115 | { | ||
116 | (void)type; | ||
117 | (void)context; | ||
118 | QByteArray localMsg = msg.toLocal8Bit(); | ||
119 | if(lastmessage != msg) { | ||
120 | lastmessage = msg; | ||
121 | flush(); | ||
122 | debugbuffer.append(msg + "\n"); | ||
123 | #if !defined(NODEBUG) | ||
124 | fprintf(stderr, "%s\n", localMsg.constData()); | ||
125 | #endif | ||
126 | repeat = 1; | ||
127 | } | ||
128 | else { | ||
129 | repeat++; | ||
130 | } | ||
131 | } | ||
132 | #endif | ||
133 | 117 | ||
134 | void SysTrace::flush(void) | 118 | void SysTrace::rotateTrace(void) |
135 | { | 119 | { |
136 | if(repeat > 1) { | 120 | QString f = QDir::tempPath() + "/rbutil-trace.log.1"; |
137 | debugbuffer.append( | 121 | if(QFileInfo(f).exists()) { |
138 | QString(" (Last message repeated %1 times.)\n").arg(repeat)); | 122 | QFile::remove(f); |
139 | #if !defined(NODEBUG) | ||
140 | fprintf(stderr, " (Last message repeated %i times.)\n", repeat); | ||
141 | #endif | ||
142 | } | 123 | } |
124 | QFile::rename(QDir::tempPath() + "/rbutil-trace.log", f); | ||
143 | } | 125 | } |
144 | 126 | ||
145 | 127 | ||