-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathsystemlogger.cpp
115 lines (92 loc) · 3.03 KB
/
systemlogger.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "systemlogger.h"
SystemLogger::SystemLogger(QString file_path, QString software_name, QString software_version, QObject *parent)
: QObject(parent),
file_path(file_path),
software_name(software_name),
software_version(software_version)
{
}
SystemLogger::~SystemLogger()
{
if (syslog_file_open)
syslog_file.close();
}
void SystemLogger::run()
{
qDebug() << "SystemLogger started...";
delay(1000);
}
void SystemLogger::enable_log_write_to_file(bool enable)
{
write_syslog_to_file = enable;
}
void SystemLogger::log_messages(QString message, bool timestamp, bool linefeed)
{
QString msg;
QDateTime dateTime = dateTime.currentDateTime();
QString dateTimeString = dateTime.toString("[yyyy-MM-dd hh':'mm':'ss'.'zzz'] ");
QMetaMethod metaMethod;
if (sender())
metaMethod = sender()->metaObject()->method(senderSignalIndex());
else
return;
//qDebug() << "metaMethod.name:" << metaMethod.name();
// Check if timestamp added
if (timestamp)
{
msg += dateTimeString;
// Check log type
if (metaMethod.name() == "LOG_E")
msg += "(EE) ";
else if (metaMethod.name() == "LOG_W")
msg += "(WW) ";
else if (metaMethod.name() == "LOG_I")
msg += "(II) ";
else if (metaMethod.name() == "LOG_D")
msg += "(DD) ";
}
msg += message;
qDebug() << msg;
// Check if linefeed added
if (linefeed)
msg += "\n";
if (metaMethod.name() != "LOG_D")
emit send_message_to_log_window(msg);
if(write_syslog_to_file)
write_syslog(msg);
}
bool SystemLogger::write_syslog(QString msg)
{
//Open file for writing if needed
if (!syslog_file_open)
{
QDateTime dateTime = dateTime.currentDateTime();
QString dateTimeString = dateTime.toString("yyyy-MM-dd_hh'h'mm'm'ss's'");
QString syslog_file_name = file_path;
if (file_path.at(file_path.length() - 1) != '/')
syslog_file_name.append("/");
syslog_file_name.append("log_fastecu_" + dateTimeString + ".txt");
syslog_file.setFileName(syslog_file_name);
qDebug() << "Create logfile: " << syslog_file_name;
if (!syslog_file.open(QIODevice::WriteOnly))
{
qDebug() << "Cannot open log file for writing";
qDebug() << syslog_file.errorString() + ": " + syslog_file.fileName();
return false;
}
syslog_file_open = true;
syslog_file_init_ready = true;
syslog_file_outstream.setDevice(&syslog_file);
syslog_file_outstream << software_name + " v" + software_version + ", system log file, start time: " + dateTimeString;
syslog_file_outstream << "\n";
}
syslog_file_outstream << msg;
syslog_file_outstream.flush();
return true;
}
void SystemLogger::delay(int timeout)
{
QTime dieTime = QTime::currentTime().addMSecs(timeout);
while (QTime::currentTime() < dieTime)
QCoreApplication::processEvents(QEventLoop::AllEvents, 1);
}