summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/systrace.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2013-11-03 11:08:18 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2013-11-04 23:32:52 +0100
commit4d2ce949b3b41f8bf0af446fa20205ddd229e579 (patch)
tree01fa19471d9831b296bea5d7049f765e38b30bbb /rbutil/rbutilqt/systrace.cpp
parent335ec75d60bba82f23fc47b20f9390e0cba9c9c5 (diff)
downloadrockbox-4d2ce949b3b41f8bf0af446fa20205ddd229e579.tar.gz
rockbox-4d2ce949b3b41f8bf0af446fa20205ddd229e579.zip
Use cutelogger for Rockbox Utility internal trace.
Change tracing from qDebug() to use cutelogger, which is available under the LGPL2.1. This allows to automatically add filename and line number to the log, and also provides multiple log levels. Change-Id: I5dbdaf902ba54ea99f07ae10a07467c52fdac910
Diffstat (limited to 'rbutil/rbutilqt/systrace.cpp')
-rw-r--r--rbutil/rbutilqt/systrace.cpp108
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
26QString SysTrace::debugbuffer;
27QString SysTrace::lastmessage;
28unsigned int SysTrace::repeat = 0;
29 27
30SysTrace::SysTrace(QWidget *parent) : QDialog(parent) 28SysTrace::SysTrace(QWidget *parent) : QDialog(parent)
31{ 29{
@@ -43,7 +41,28 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent)
43void SysTrace::refresh(void) 41void 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
74QString 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
55void SysTrace::save(QString filename) 87void 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
74void SysTrace::saveCurrentTrace(void) 96void 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
97void 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
114void 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
134void SysTrace::flush(void) 118void 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