This commit is contained in:
Chenwenxuan
2024-03-06 14:54:30 +08:00
commit edac2715f0
1525 changed files with 809982 additions and 0 deletions

128
device/deviceinfo.cpp Normal file
View File

@@ -0,0 +1,128 @@
#include "deviceinfo.h"
#include <QDateTime>
#include "myexception.h"
#include "exceptioncode.h"
DeviceInfo* DeviceInfo::uniqueInstance = nullptr;
DeviceInfo* DeviceInfo::instance() {
if(!uniqueInstance) {
uniqueInstance = new DeviceInfo;
QDateTime now = QDateTime::currentDateTime();
QString nowStr;
nowStr = now.toString("yyyyMMdd_hhmmss");
// 定义Info日志名称
QString fNameInfo = QString("data/log/info/info_%1.log").arg(nowStr);
QByteArray qbyInfo = fNameInfo.toLocal8Bit();
char* fNameInfo_c = qbyInfo.data();
// 获取日志文件句柄
uniqueInstance->streamInfo = fopen(fNameInfo_c, "wt");
if(uniqueInstance->streamInfo == nullptr)
{
fNameInfo = QString("info_%1.log").arg(nowStr);
qbyInfo = fNameInfo.toLocal8Bit();
char* fNameInfo_c = qbyInfo.data();
// 获取日志文件句柄
uniqueInstance->streamInfo = fopen(fNameInfo_c, "wt");
}
// 定义Alarm日志名称
QString fNameAlarm = QString("data/log/alarm/alarm_%1.log").arg(nowStr);
QByteArray qbyAlarm = fNameAlarm.toLocal8Bit();
char* fNameAlarm_c = qbyAlarm.data();
uniqueInstance->streamAlarm = fopen(fNameAlarm_c, "wt");
if(uniqueInstance->streamAlarm == nullptr)
{
fNameAlarm = QString("alarm_%1.log").arg(nowStr);
qbyAlarm = fNameAlarm.toLocal8Bit();
char* fNameAlarm_c = qbyAlarm.data();
uniqueInstance->streamAlarm = fopen(fNameAlarm_c, "wt");
}
}
return uniqueInstance;
}
void DeviceInfo::deleteInstance() {
if (uniqueInstance) {
delete uniqueInstance;
}
}
DeviceInfo::DeviceInfo()
{
}
/**
* 实现把文本字符串写入文件,并且文本字符可以带多个格式参数
* 写信息日志
*/
void DeviceInfo::printInfo(const char* format ...) {
if(uniqueInstance->streamInfo == nullptr)
{
throw MyException(QString("写入日志失败!异常代码为:%1").arg(WRITE_LOG_FAIL),WRITE_LOG_FAIL);
}
// 定义可变参数指针
va_list ap;
// 初始化可变参数指针,指向第一个可变参数
va_start(ap, format);
// 使用参数列表发送格式化输出到流 streamInfo 中
// 参数1这是指向 FILE 对象的指针,该 FILE 对象标识了流
// 参数2这是 C 字符串,包含了要被写入到流 streamInfo 中的文本。它可以包含嵌入的 format 标签format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
// 参数3可变参数指针
vfprintf(streamInfo, format, ap);
fprintf(streamInfo, "\n");
va_end(ap);
fflush(streamInfo);
}
/**
* 实现把文本字符串写入文件,并且文本字符可以带多个格式参数
* 写报警日志
*/
void DeviceInfo::printAlarm(const char* format ...) {
// 定义可变参数指针
va_list ap;
// 初始化可变参数指针,指向第一个可变参数
va_start(ap, format);
// 使用参数列表发送格式化输出到流 streamInfo 中
// 参数1这是指向 FILE 对象的指针,该 FILE 对象标识了流
// 参数2这是 C 字符串,包含了要被写入到流 streamInfo 中的文本。它可以包含嵌入的 format 标签format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
// 参数3可变参数指针
vfprintf(streamAlarm, format, ap);
fprintf(streamAlarm, "\n");
va_end(ap);
fflush(streamAlarm);
}
void DeviceInfo::printDeviceSystemInfo(const QString text,SYS_INFO_LEVEL level)
{
QDateTime now = QDateTime::currentDateTime();
QString nowStr;
nowStr = now.toString("yyyyMMdd_hh:mm:ss:zzz ");
nowStr+=text;
emit deviceSystemInfoSGL(nowStr,level);
//记录日志
QByteArray qbyInfo = nowStr.toLocal8Bit();
char* info_c = qbyInfo.data();
printInfo(info_c);
}
void DeviceInfo::printDeviceSalamInfo(const QString text,SYS_INFO_LEVEL level)
{
QDateTime now = QDateTime::currentDateTime();
QString nowStr;
nowStr = now.toString("yyyyMMdd_hh:mm:ss:zzz ");
nowStr += text;
emit deviceSalamInfoSGL(nowStr,level);
emit deviceSystemInfoSGL(nowStr,level);
//记录日志
QByteArray qbyInfo = nowStr.toLocal8Bit();
char* info_c = qbyInfo.data();
printInfo(info_c);
printAlarm(info_c);
}