添加debug重定向,添加命令行

This commit is contained in:
ranchuan
2023-12-02 11:27:25 +08:00
parent ae972b21aa
commit 66b9453255
19 changed files with 518 additions and 104 deletions

View File

@@ -65,6 +65,14 @@ public:
myarray mid(qsizetype index,qsizetype len=-1LL){
return myarray(QByteArray::mid(index,len));
}
QList<myarray> split(char sep){
QByteArrayList list=QByteArray::split(sep);
QList<myarray> myarrlist;
foreach (QByteArray qb, list) {
myarrlist.append(myarray(qb));
};
return myarrlist;
}
};
class mystring : public QString

View File

@@ -4,7 +4,6 @@
#include "QDir"
// 配置路径
#define CFG_PATH mystring("/home/root/config/")
#define CHECK_CFG_FILE_NAME cfg_->def_check_cfg
check_range my_json::json_to_range(QJsonValue v)
@@ -55,12 +54,6 @@ check_cfg::check_cfg()
this->cfg_ = syscfg();
this->scheme_ = nullptr;
QDir path;
if (!path.exists(CFG_PATH))
{
path.mkdir(CFG_PATH);
}
reload();
}
@@ -89,7 +82,7 @@ void check_cfg::scheme_json_to_struct()
scheme_->task_num = get_check_task_num();
scheme_->timeout_m = get_check_time_out();
scheme_->marerr_num = errs.size();
qDebug("scheme,id=%d,task_num=%d",scheme_->plan_id,scheme_->task_num);
qDebug("scheme,id=%d,task_num=%d", scheme_->plan_id, scheme_->task_num);
for (int i = 0; i < scheme_->task_num; i++)
{
scheme_task_def *st = &scheme_->task[i];
@@ -102,10 +95,10 @@ void check_cfg::scheme_json_to_struct()
QList<check_range> rangs = ct.get_ranges();
int rangs_num = rangs.size();
int err_num = ret_errs.size();
qDebug("st,err,item_num=%d,taskid=%d,taskindex=%d",st->item_num,st->taskid,st->taskindex);
qDebug("st,err,item_num=%d,taskid=%d,taskindex=%d", st->item_num, st->taskid, st->taskindex);
for (int i = 0; i < st->item_num; i++)
{
qDebug("\ti=%d",i);
qDebug("\ti=%d", i);
if (rangs_num > i)
{
st->range[i].err = 0;
@@ -162,7 +155,7 @@ bool check_cfg::updata(QString jstring)
json_doc = QJsonDocument::fromJson(jstring.toUtf8(), &err);
if (err.error != QJsonParseError::NoError)
{
qWarning("parse json failed:%s",err.errorString().toLocal8Bit().data());
qWarning("parse json failed:%s", err.errorString().toLocal8Bit().data());
qWarning() << jstring;
return false;
}
@@ -495,7 +488,7 @@ QList<check_err> check_cfg::get_ch_merrcode()
if (!ch_errcode.isEmpty())
{
// 有子错误没找到主错误
qWarning()<<"many suberr left.%d"<<ch_errcode;
qWarning() << "many suberr left.%d" << ch_errcode;
}
return l;
}
@@ -511,7 +504,7 @@ bool check_cfg::in_err_range(QList<check_err> &l, uint8_t code)
return true;
}
}
qDebug("can not find mcode,subcode=%d",code);
qDebug("can not find mcode,subcode=%d", code);
return false;
}

114
base/debug.cpp Normal file
View File

@@ -0,0 +1,114 @@
#include <QFile>
#include <QMessageLogger>
#include <qlogging.h>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QString>
#include "base/mycfg.h"
#include <QUdpSocket>
#include <QDir>
#include "QApplication"
#include "QMutex"
#define FILE_PATH "/home/root/log/"
#define FILE_NAME "_log.txt"
char *msgHead[] =
{
(char *)"Debug ",
(char *)"Warning ",
(char *)"Critical",
(char *)"Fatal ",
(char *)"Info "};
struct mydebug
{
QFile *file;
QUdpSocket *socket_;
QByteArray send_data;
QHostAddress host_addr;
quint16 port;
bool active;
void (*send_data_fun)(QByteArray data);
QMutex mutex;
// QList<QString> type_filter;
// QList<QString> file_filter;
// QList<filter_line> line_filter;
};
static mydebug g_debug;
void print_to_console(QtMsgType type, const QMessageLogContext &context, const QString &msg);
void print_to_file(QtMsgType type, const QMessageLogContext &context, const QString &msg);
// 创建日志文件,名称用于创建日志文件
void mydebug_init(QString name)
{
qSetMessagePattern("[%{type}] %{time yyyy-MM-dd hh:mm:ss.zzz} %{function}:%{line} %{message}");
QDir tempDir;
if (!tempDir.exists(FILE_PATH))
{
tempDir.mkpath(FILE_PATH);
}
if (g_debug.file != nullptr)
{
delete g_debug.file;
}
g_debug.file = new QFile(FILE_PATH + name + FILE_NAME);
qInfo() << "set log file as " << g_debug.file->fileName();
if (g_debug.file->exists())
{
if (g_debug.file->remove() != true)
qWarning() << "remove file " << g_debug.file->fileName() << "err";
}
if (!g_debug.file->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
{
return;
}
qInstallMessageHandler(print_to_file);
}
void mydebug_init()
{
qSetMessagePattern("[%{type}] %{time yyyy-MM-dd hh:mm:ss.zzz} %{function}:%{line} %{message}");
qInfo() << "set log as console.";
qInstallMessageHandler(print_to_console);
}
void print_to_console(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
g_debug.mutex.lock();
QByteArray localMsg = msg.toLocal8Bit();
QString current_date_time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
Q_UNUSED(current_date_time);
if(context.file!=0){
fprintf(stderr, "%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[20], context.line, localMsg.constData());
}else{
fprintf(stderr,"%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), context.file, context.line, localMsg.constData());
}
g_debug.mutex.unlock();
}
void print_to_file(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
g_debug.mutex.lock();
QByteArray localMsg = msg.toLocal8Bit();
QString current_date_time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
if (g_debug.file)
{
QTextStream tWrite(g_debug.file);
if(context.file!=0){
tWrite << QString::asprintf("%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[20], context.line, localMsg.constData());
}else{
tWrite << QString::asprintf("%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), context.file, context.line, localMsg.constData());
}
}
g_debug.mutex.unlock();
}

18
base/debug.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef debug_h__
#define debug_h__
#include "QDebug"
void mydebug_init(QString name);
void mydebug_init();
#endif

View File

@@ -168,13 +168,13 @@ void mycfg::to_class(mystring str)
debug_port = j.value("debug_port").toInt(12345);
cmd_port = j.value("cmd_port").toInt(7777);
log_redirect = j.value("log_redirect").toString("console");
def_check_cfg = j.value("def_check_cfg").toString("checker_ye_cfg.json");
def_mcu_app = j.value("def_mcu_app").toString("slave_app.pkt");
def_check_cfg = j.value("def_check_cfg").toString(CFG_PATH+"checker_ye_cfg.json");
def_mcu_app = j.value("def_mcu_app").toString(CFG_PATH+"slave_app.pkt");
use_lua_judge = j.value("use_lua_judge").toBool(false);
device_type = j.value("device_type").toString("checker");
moter_count = j.value("moter_count").toInt(20000);
uart_bsp = j.value("uart_bsp").toInt(57600);
def_lua_judge = j.value("lua_judge").toString("judge.lua");
def_lua_judge = j.value("lua_judge").toString(CFG_PATH+"judge.lua");
coder_return_mode = j.value("coder_return_mode").toInt(1);
slave_addr_start = j.value("slave_addr_start").toInt(0);
slave_scheme_ext = j.value("slave_scheme_ext").toInt(0);
@@ -252,7 +252,7 @@ void mycfg::init_env()
{
if (!info.privates.contains(name))
{
qInfo() << "release file " << file.fileName() << endl;
qInfo() << "release file " << file.fileName();
file.open(QIODevice::ReadWrite);
file.write(d);
file.close();
@@ -296,7 +296,7 @@ void mycfg::init_env()
if (md5_1 != md5_2)
{
if (file_dst.remove() != true)
qWarning() << "remove file " << file_dst.fileName() << "err" << endl;
qWarning() << "remove file " << file_dst.fileName() << "err";
}
}
}
@@ -304,7 +304,7 @@ void mycfg::init_env()
{
if (!QFile::copy(file_src.fileName(), file_dst.fileName()))
{
qWarning() << "copy app failed." << endl;
qWarning() << "copy app failed.";
}
}
if (file_dst.fileName() != file_src.fileName())
@@ -349,7 +349,7 @@ void mycfg::save()
if (file.exists())
{
if (file.remove() != true)
qWarning() << "remove file " << file.fileName() << "err" << endl;
qWarning() << "remove file " << file.fileName() << "err";
}
file.open(QIODevice::ReadWrite);
QTextStream stream(&file);
@@ -369,7 +369,7 @@ bool mycfg::save_file(mystring name, myarray data)
{
if (file.remove() != true)
{
qWarning() << "remove file " << file.fileName() << "err" << endl;
qWarning() << "remove file " << file.fileName() << "err";
return false;
}
}