QT - 日志:qDebug/qInfo/qWarning/qCritical

篇一、日志打印函数

头文件: #include <QDebug>
代码:qDebug()<<"hello world!";
其他打印级别:

qInfo(): 普通信息
qDebug(): 调试信息
qWarning(): 警告信息
qCritical(): 严重错误
qFatal(): 致命错误

1. qDebug(调试信息提示:有2种方式)
qDebug("调试信息输出: %d",age);        // C风格(方式1)
qDebug() << "输出调试信息: " << age;    // C++风格(方式2)
qDebug的注意事项:

        流的形式输出会自动在数据之间加上空格

        输出之后会自动插入换行

        输出(QString)字符串会在字符串之间加上双引号

 如何取消流的形式输出时数据间的空格呢?

qDebug() << "输出调试信息: " << age;                // 未取消数据间空格
qDebug().nospace() << "输出调试信息: " << age;    // 取消数据间的空格
 

 如何取消输出字符串(QString)时的双引号呢?

QString str = "Hello World";
qDebug() << str;
qDebug().noquote() << str;
 

 2. qInfo(输出信息)
int num = 1001;
qInfo("qInfo输出%d",num);   //(方式1)
qInfo() << "qInfo输出" << num;   //(方式2)

 3. qWarning(一般的警告提示)
qWarning("qWarning输出%d", num);   //(方式1)
qWarning() << "qWarning输出" << num;   //(方式2)

4. qCritical(严重的错误提示)
qCritical("qCritical输出%d", num);   //(方式1)
qCritical() << "qCritical输出" << num;   //(方式2)
  

 5. qFatal(致命错误提示,会直接中断程序)
//qFatal() 不能使用流的方式输出
qFatal("qFatal输出");           //(方式1)
qInfo() << "如果没有中断,我就输出来了";   //(方式2)
                        
原文链接:https://blog.csdn.net/ShiXiAoLaNga/article/details/127513865

篇二、介绍

在 Qt 中,信息输出机制用于在程序运行时输出各种信息,包括调试信息、提示信息、警告信息和错误信息等。Qt 提供了多种信息输出机制,主要包括以下几种:

  • qDebug:最常用的信息输出机制,用于输出各种调试信息,例如变量的值、函数的返回值和对象的状态等。可以通过在代码中添加 qDebug() 语句来输出信息。
  • qInfo:用于输出提示信息,例如程序启动信息和操作成功信息等。可以通过在代码中添加 qInfo() 语句来输出信息。
  • qWarning:用于输出警告信息,例如一些异常但不致命的错误信息。可以通过在代码中添加 qWarning() 语句来输出信息。
  • qCritical:用于输出错误信息,例如一些致命的错误信息。可以通过在代码中添加 qCritical() 语句来输出信息。

每种信息输出机制都有不同的作用和使用场景,可以根据需要进行选择。例如,在调试过程中,可以使用 qDebug 输出各种调试信息,以便快速定位和解决问题。而在生产环境中,可以使用 qInfo 输出一些重要的提示信息,以便用户了解程序的运行状况。 需要注意的是,信息输出机制可能会对程序的性能产生影响,因此在使用时需要慎重考虑。可以通过在编译时添加宏定义的方式来控制信息输出,例如通过定义 QT_NO_DEBUG 宏来禁用 qDebug 输出。


QDebug

在 Qt 中,使用 qDebug 输出调试信息是一种常用的调试方法,可以在程序运行时输出各种调试信息,例如变量的值、函数的返回值和对象的状态等。下面介绍如何在 Qt 中使用 qDebug 输出调试信息,并输出不同类型的信息。

在 Qt 中使用 qDebug

使用 qDebug 输出调试信息非常简单,只需要在代码中添加 qDebug() 语句,即可在程序运行时输出信息。例如,下面的代码输出了一个字符串和一个整数的值:

QString str = "Hello, world!";
int num = 123;
qDebug() << str << num;

在程序运行时,会输出如下信息: Hello, world!" 123 需要注意的是,qDebug 输出的信息会自动换行,并以空格分隔不同的参数。如果需要输出多行信息,可以在每行末尾添加<< '\n',例如:

qDebug() << "Line 1" << '\n'
       << "Line 2" << '\n';

输出不同类型的信息

除了字符串和整数外,qDebug 还可以输出其他类型的信息,例如浮点数、布尔值和对象等。下面分别介绍如何>输出这些类型的信息:

浮点数:使用 %!f(MISSING) 格式化符号输出浮点数

double pi = 3.1415926;
qDebug() << "PI = " << QString::number(pi, 'f', 2);

输出结果为:

PI = 3.14

布尔值:使用 %! (MISSING)和 %! (MISSING)格式化符号输出布尔值

double pi = 3.1415926;
qDebug() << "PI = " << QString::number(pi, 'f', 2);

输出结果为: Flag = true

对象:使用 qPrintable() 函数输出对象的信息

QPoint pt(10, 20);
qDebug() << "Point = " << qPrintable(pt.toString());

输出结果为:

Point = QPoint(10, 20)

需要注意的是,qDebug 输出的信息只在调试模式下有效,因此在发布程序时应该尽可能避免使用 qDebug 输出调试信息。可以使用 qInfo、qWarning 或 qCritical 输出不同级别的信息,以便在发布程序时更好地控制输出。


qInfo

在Qt中使用qInfo输出提示信息是非常简单的,只需要包含#include 和#include 这两个头文件即可。其中QLoggingCategory头文件定义了日志类别,而QtDebug头文件定义了用于调试的一系列宏。 在输出提示信息之前,我们需要设置日志类别。我们可以通过以下语句设置日志类别:

QLoggingCategory::setFilterRules(".debug=true\n.warning=false");

这句话的意思是将所有debug级别的信息输出,将所有warning级别的信息过滤掉。

然后我们就可以使用qInfo来输出提示信息了。 qInfo有多种使用方式,可以输出不同类型的提示信息,例如:

qInfo() << "This is an informational message."; 
qInfo("This is an informational message with a category: %!s(MISSING)", QLoggingCategory::defaultCategory()->categoryName().toUtf8().constData()); 
qInfo() << "The > time is" << QTime::currentTime();

第一种方式是最简单的方式,它可以输出一个简单的提示信息。 第二种方式可以将信息分类,方便我们查看和管理不同类型的信息。 第三种方式可以输出一些带参数的信息,例如当前时间。

除了qInfo之外,Qt中还提供了其他的输出提示信息的函数,例如qWarning、qCritical和qFatal等。它们分别用于输出警告、错误和致命错误信息,使用方式与qInfo类似。

最后需要注意的是,在发布版本中,我们应该关闭所有输出提示信息的功能,以提高程序的性能和安全性。我们可以通过设置日志类别来实现这一点,例如:

QLoggingCategory::setFilterRules(".debug=false\n.warning=false\n*.error=false\n*.fatal=false");

这句话的意思是将所有级别的信息都过滤掉,从而关闭输出提示信息的功能。


qWarning

在Qt中使用qWarning输出警告信息也很简单,只需要包含#include 头文件即可。和qInfo类似,我们也可以使用qWarning来输出不同类型的警告信息。

例如:

qWarning() << "This is a warning message."; 
qWarning("This is a warning message with a category: %!!(MISSING)s(MISSING)", QLoggingCategory::defaultCategory()->>categoryName().toUtf8().constData()); 
qWarning() << "The input value is invalid: " << inputValue;

第一种方式是最简单的方式,它可以输出一个简单的警告信息。 第二种方式可以将信息分类,方便我们查看和管理不同类型的信息。 第三种方式可以输出一些带参数的信息,例如输入值无效的警告信息。

需要注意的是,qWarning的使用和qInfo类似,但输出的信息应该是一些警告信息,而不是一些普通的提示信息。在程序开发中,我们应该根据需要使用不同的输出机制,以便更好地管理和调试程序。


qCritical

在Qt中使用qCritical输出错误信息也很简单,只需要包含#include 头文件即可。和qInfo和qWarning类似,我们也可以使用qCritical来输出不同类型的错误信息。

例如:

qCritical() << "This is a critical error message."; 
qCritical("This is a critical error message with a category: %!!(MISSING)!(MISSING)s(MISSING)", >QLoggingCategory::defaultCategory()->categoryName().toUtf8().constData()); 
qCritical() << "The file cannot be opened: " << fileName;

第一种方式是最简单的方式,它可以输出一个简单的错误信息。

第二种方式可以将信息分类,方便我们查看和管理不同类型的信息。

第三种方式可以输出一些带参数的信息,例如文件无法打开的错误信息。

需要注意的是,qCritical的使用和qInfo、qWarning类似,但输出的信息应该是一些严重的错误信息,例如文件无法打开、内存分配失败等。在程序开发中,我们应该根据需要使用不同的输出机制,以便更好地管理和调试程序。


自定义信息输出格式

在Qt中自定义信息输出格式可以通过qInstallMessageHandler函数来实现,该函数可以安装一个自定义的消息处理程序,用于处理Qt中的所有消息。 例如,我们可以创建一个名为myMessageOutput的函数,用于处理输出信息,并将它安装为消息处理程序。在该函数中,我们可以使用QString::asprintf函数来设置输出信息的格式,例如添加时间戳、文件名和行号等。 示例代码如下:

#include <QtDebug>

void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
   QByteArray localMsg = msg.toLocal8Bit();
   switch (type) {
   case QtDebugMsg:
       fprintf(stderr, "[%!s(MISSING)] Debug: %!s(MISSING) (%!s(MISSING):%!u(MISSING), %!s(MISSING))\n", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toUtf8().constData(), localMsg.constData(), context.file, context.line, context.function);
       break;
   case QtInfoMsg:
       fprintf(stderr, "[%!s(MISSING)] Info: %!s(MISSING) (%!s(MISSING):%!u(MISSING), %!s(MISSING))\n", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toUtf8().constData(), localMsg.constData(), context.file, context.line, context.function);
       break;
   case QtWarningMsg:
       fprintf(stderr, "[%!s(MISSING)] Warning: %!s(MISSING) (%!s(MISSING):%!u(MISSING), %!s(MISSING))\n", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toUtf8().constData(), localMsg.constData(), context.file, context.line, context.function);
       break;
   case QtCriticalMsg:
       fprintf(stderr, "[%!s(MISSING)] Critical: %!s(MISSING) (%!s(MISSING):%!u(MISSING), %!s(MISSING))\n", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toUtf8().constData(), localMsg.constData(), context.file, context.line, context.function);
       break;
   case QtFatalMsg:
       fprintf(stderr, "[%!s(MISSING)] Fatal: %!s(MISSING) (%!s(MISSING):%!u(MISSING), %!s(MISSING))\n", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toUtf8().constData(), localMsg.constData(), context.file, context.line, context.function);
       abort();
   }
}

int main(int argc, char *argv[])
{
   qInstallMessageHandler(myMessageOutput);

   // 程序代码

   return 0;
}

在该示例代码中,我们创建了一个名为myMessageOutput的函数,用于处理输出信息。在该函数中,我们使用QString::asprintf函数来设置输出信息的格式,例如添加时间戳、文件名和行号等。然后,我们使用qInstallMessageHandler函数将myMessageOutput函数安装为消息处理程序,从而实现自定义信息输出格式的功能。

需要注意的是,在自定义信息输出格式时,我们应该根据需要添加所需的信息,但不要添加过多的信息,以免影响程序的性能和可读性。同时,在发布版本中,我们应该关闭所有输出提示信息的功能,以提高程序的性能和安全性。


不同输出方式的区别和底层逻辑

在Qt中,qDebug、qInfo、qWarning和qCritical是用于输出不同级别信息的函数,它们分别对应调试信息、提示信息、警告信息和错误信息。它们的区别和底层逻辑如下:

  • qDebug qDebug是用于输出调试信息的函数,它的输出级别最低,可以输出一些调试信息,例如变量的值、程序的运行状态等。在发布版本中,该函数的输出信息会被自动过滤掉,从而不会影响程序的性能和安全性。 底层逻辑:qDebug函数实际上是一个宏,它会在编译时根据当前编译环境的设置,将调试信息输出到标准输出流(stdout)中。
  • qInfo qInfo是用于输出提示信息的函数,它的输出级别比qDebug高,可以输出一些重要的提示信息,例如程序的运行状态、用户的操作等。 底层逻辑:qInfo函数实际上是一个宏,它会在编译时根据当前编译环境的设置,将提示信息输出到标准输出流(stdout)中。
  • qWarning qWarning是用于输出警告信息的函数,它的输出级别比qInfo高,可以输出一些警告信息,例如输入值无效、文件无法打开等。在发布版本中,该函数的输出信息会被自动过滤掉,从而不会影响程序的性能和安全性。 底层逻辑:qWarning函数实际上是一个宏,它会在编译时根据当前编译环境的设置,将警告信息输出到标准错误流(stderr)中。
  • qCritical qCritical是用于输出错误信息的函数,它的输出级别最高,可以输出一些严重的错误信息,例如内存分配失败、数据库连接失败等。 底层逻辑:qCritical函数实际上是一个宏,它会在编译时根据当前编译环境的设置,将错误信息输出到标准错误流(stderr)中。

总的来说,这些函数的区别在于输出信息的级别和类型不同,底层逻辑也有所区别。在程序开发中,我们应该根据需要使用不同的输出机制,以便更好地管理和调试程序。

总结

在 Qt 中,信息输出是调试和排错工作中不可或缺的一部分。Qt 提供了多种信息输出机制,包括 qDebug、qInfo、qWarning 和 qCritical 等,每种机制都有不同的作用和使用场景。在使用时,需要根据实际需求选择合适的信息输出机制,并注意输出信息的类型和格式。

QDebug 是 Qt 中最常用的信息输出机制,可以输出各种调试信息;qInfo 是用于输出提示信息的机制;qWarning 是用于输出警告信息的机制;qCritical 是用于输出错误信息的机制。除了这些基本机制外,Qt 还提供了自定义信息输出格式的功能,可以根据需要设置时间戳、文件名和行号等信息。 在使用信息输出机制时,需要注意避免过度使用,以免影响程序的性能。同时,还需要根据实际需求选择合适的信息输出级别,以便快速定位和解决问题。

篇三、安装自定义的消息处理程序qInstallMessageHandler()

一、基本分类:
qDebug : 调试信息提示
qWarning: 一般的警告提示
qCritical: 严重错误提示
qFatal: 致命错误提示


二、如何截获这些信息(安装自定义的消息处理程序
Qt4提供了qInstallMsgHandler 方法用来定制消息发生后如何来处理。到了Qt5,使用了新的Qt::qInstallMessageHandler()来替代。
qInstallMsgHandler 是一个回调函数,主要是由qDebug、qWarnng、qCritical、qFatal这些函数进行触发,
也就是说,qDeubg这些函数处理的消息文本会被qInstallMsgHandler 所指向的回调函数截获,这样就允许用户自己来处理这些消息文本。
例如,你完全可以将这些消息文本输出并保存到相关的日志文件中。请看下面的示例!


三、将qDebug()\qWarning()\qCritical()\qFatal() 信息输出到指定文件中

 1 #include <QtDebug>
 2 #include <QFile>
 3 #include <QTextStream>
 4 
 5 void customMessageHandler(QtMsgType type, const char *msg)
 6 {
 7         QString txt;
 8         switch (type) {
 9         //调试信息提示
10         case QtDebugMsg:
11                 txt = QString("Debug: %1").arg(msg);
12                 break;
13 
14         //一般的warning提示
15         case QtWarningMsg:
16                 txt = QString("Warning: %1").arg(msg);
17         break;
18         //严重错误提示
19         case QtCriticalMsg:
20                 txt = QString("Critical: %1").arg(msg);
21         break;
22         //致命错误提示
23         case QtFatalMsg:
24                 txt = QString("Fatal: %1").arg(msg);
25                 abort();
26         }
27 
28         QFile outFile("debuglog.txt");
29         outFile.open(QIODevice::WriteOnly | QIODevice::Append);
30         QTextStream ts(&outFile);
31         ts << txt << endl;
32 }
33 
34 int main( int argc, char * argv[] )
35 {
36         QApplication app( argc, argv );
37 
38         //先注册自己的MsgHandler
39         qInstallMsgHandler(customMessageHandler);
40         
41         //以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
42         qDebug("This is a debug message at thisisqt.com");
43         qWarning("This is a warning message at thisisqt.com");
44         qCritical("This is a critical message at thisisqt.com");
45         qFatal("This is a fatal message at thisisqt.com");
46 
47         return app.exec();
48 }


四、如何取消/卸载信息处理呢?
简单:
还是用qInstallMsgHandler.
只要执行qInstallMsgHandler(0) 就可以了,QT5中为qInstallMessageHandler(0);

#########################################################################
在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替。
    做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪、定位,Qt也提供的类似的机制。之前用Qt4做项目时使用的是Qt::qInstallMsgHandler(),到了Qt5,使用了新的Qt::qInstallMessageHandler()来替代,详情请查看Qt助手(C++ API changes)。

qInstallMessageHandler(0);

描述
    助手中在C++ API changes中提到:Qt::qDebug()、Qt::qWarning()、Qt::qCritical()、Qt::qFatal()被改变为宏来跟踪源代码的消息来源。被打印的信息可以被配置(用于缺省消息处理程序),通过设置该新的环境变量QT_MESSAGE_PATTERN。Qt::qInstallMsgHandler()已过时,因此建议使用Qt::qInstallMessageHandler()来代替。

级别
qDebug:调试信息
qWarning:警告信息
qCritical:严重错误
qFatal:致命错误

实例

 需求(目的):
生成log.txt日志文件,记录详细日志信息(包括等级、描述信息、产生时间等),以便于快速跟踪、定位。

 1 void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
 2 {
 3     QString text;
 4     switch(type)
 5     {
 6         case QtDebugMsg:
 7             text = QString("Debug:");
 8             break;
 9 
10         case QtWarningMsg:
11             text = QString("Warning:");
12             break;
13 
14         case QtCriticalMsg:
15             text = QString("Critical:");
16             break;
17 
18         case QtFatalMsg:
19             text = QString("Fatal:");
20     }
21     QDateTime current_date_time = QDateTime::currentDateTime();
22     QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss ddd");
23     QString message = text.append(msg).append("(").append(current_date).append(")");
24 
25     QFile file("log.txt");
26     file.open(QIODevice::WriteOnly | QIODevice::Append);
27     QTextStream text_stream(&file);
28     text_stream<<message<<"\r\n";
29     file.close();
30 }
31 
32 int main(int argc, char *argv[])
33 {
34     QApplication app(argc, argv);
35 
36     //注册MessageHandler
37     qInstallMessageHandler(outputMessage);
38 
39     //打印日志到文件中
40     qDebug("This is a debug message");
41     qWarning("This is a warning message");
42     qCritical("This is a critical message");
43     qFatal("This is a fatal message");
44 
45     return app.exec();
46 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FSH6罗德与施瓦茨FSH6频谱分析仪

181/2461/8938产品概述&#xff1a; R&S FSH6频谱分析仪坚固耐用、方便易用&#xff0c;专为野外使用而设计。它重量轻、操作简单、设计合理且具有大量测量功能&#xff0c;是任何需要高效测量仪器进行户外工作的人不可或缺的工具。 R&S FSH6是一款手持式频谱分析仪&…

Jupyter Notebook启动及其常用快捷键

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 1.JupyterNotebook 第一种启动方式 点击 windows 电脑左下角开始 > 搜索 Anaconda > 点击 Anaconda Prompt 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 在命令行窗口输入&…

华盛顿大学撰文反驳微软,我们无法删除大模型关于哈利波特的记忆

在人工智能的发展过程中&#xff0c;一个引人入胜的议题是机器学习模型是否能够被训练以忘记其曾经学到的信息。近期&#xff0c;Ronen Eldan和Mark Russinovich在其研究“谁才是哈利波特&#xff1f;”[1]中提出了一种创新技术&#xff0c;声称能够从LLMs中“抹去”特定数据集…

城市交通视频视频联网系统实施方案

目录 1.需求调研 2.系统设计 3.技术分析 4.技术开发 5.系统平台环境要求 6.网络要求 7.安全要求 8.项目交付和验收 8.1交付准备 8.2系统安装、培训 8.2.1系统验收 8.2.2项目进度计划 附录&#xff1a;交通监控设备情况调研表 1.需求调研 从SZ市交通运输局、以及下…

opencv使用问题记录一二

opencv介绍 opencv是一个计算机视觉处理软件库&#xff0c;拥有强大的功能和高效的性能。 但是由于早期版本的原因&#xff0c;存在一些与目前主流使用不兼容的问题 问题与解决 RGB通道顺序 一般图片处理类库的通道顺序就是RGB&#xff0c;但是opencv的是反过来的&#xf…

如何改写出优质文案,AI写作工具有方法

在当今数字化时代&#xff0c;内容创作已成为企业和个人在市场竞争中脱颖而出的关键因素。而写作优质文案是吸引读者注意力、传达信息以及促使行动的重要手段之一。然而&#xff0c;对许多人来说&#xff0c;写作可能是一项具有挑战性的任务。幸运的是&#xff0c;随着人工智能…

书生·浦语大模型开源体系(二)笔记

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【Vscode】无法将“python,pip,node,npm等”识别为cmdlet...问题

问题出现场景 新换个电脑&#xff0c;然后重新安装了软件&#xff0c;又复现一次又一次“老生常谈”的问题。 解决方法 网络答案吧五花八门&#xff0c;我采取一个我的场景解决可行的方案&#xff0c; 首先我的场景是&#xff0c;环境变量&#xff0c;配置路径都是没有问题…

super关键字的使用总结

一、super关键字的使用1. 为什么需要super&#xff1f;举例1&#xff1a;子类继承父类以后&#xff0c;对父类的方法进行了重写&#xff0c;那么在子类中&#xff0c;是否还可以对父类中被重写的方法进行调用&#xff1f; 可以&#xff01;举例2&#xff1a;子类继承父类以后&a…

ice-06 运用Burp-Suite进行暴力破解(攻防世界)

ice-06 步骤一&#xff1a;点击超链接&#xff0c;发现只有报表中心才有用。 步骤二&#xff1a;点进去发现输入日期范围没有用 步骤三&#xff1a;使用Burp Suite进行抓包&#xff0c;把值传到Action到Intruder中 步骤四&#xff1a;如图所示进行配置 步骤五&#xff1a;攻击…

13.2k star, 高生产力的低代码开发平台 lowcode-engine

13.2k star, 高生产力的低代码开发平台 lowcode-engine 分类 开源分享 项目名: lowcode-engine -- 高生产力的低代码研发平台 Github 开源地址&#xff1a; GitHub - alibaba/lowcode-engine: An enterprise-class low-code technology stack with scale-out design / 一套面…

【滤波器基础】卡尔曼滤波器

滤波器基础 为了进一步抑制高频噪声&#xff0c;科研人员也会采用一些高阶低通滤波器来对电流采样信号的高频噪声进行抑制&#xff0c;常用的一种滤波器为&#xff1a;巴特沃兹滤波器。除了这种滤波器&#xff0c;也存在如贝塞尔、切比雪夫滤波器等。 巴特沃斯滤波器 在线性控…

【御控物联】JavaScript JSON结构转换(15):对象To数组——转换映射方式

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

服务器托管让服务器管理更轻松高效

在信息化飞速发展的今天&#xff0c;服务器作为企业数据处理和信息存储的核心设备&#xff0c;其管理的重要性日益凸显。服务器托管&#xff0c;作为一种高效、专业的服务器管理方式&#xff0c;正逐渐成为众多企业的首选。那么&#xff0c;服务器托管究竟是如何让服务器管理更…

10个最佳3D角色下载站

每个人都喜欢免费的东西。 无论是免费的 3D 角色还是游戏资产&#xff0c;我们都喜欢它们。 以下是可以为你的游戏获取免费 3D 角色的前 10 个网站的列表。 你可以将它们用于多种用途&#xff0c;例如 3D 打印或动画剪辑。 如果需要将下载的3D角色转化为其他格式&#xff0c;可…

面具下的flag【杂项】

知识点&#xff1a; binwalk 检测文件是否合并binwalk -e 文件名 将文件进行剥离&#xff0c;自动解压出压缩包中的文件vmdk文件是可以进行解压的 7z x 文件 -o./vmdk是linux文件&#xff0c;需要在linux中进行解压&#xff0c;看了别人的wp发现在window中解压是没有关键信息…

智能化最积极的海尔,对大模型不着急了

文&#xff5c;刘俊宏 AI改变终端的时代&#xff0c;最早投入智能化的家电公司表现怎么样&#xff1f; 3月27日晚间&#xff0c;海尔智家&#xff08;下简称海尔&#xff09;发布其2023年报。财报显示&#xff0c;2023年海尔智家营收2614.28亿元&#xff0c;同比增长7.33%&am…

把组合损失中的权重设置为可学习参数

目前的需求是&#xff1a;有一个模型&#xff0c;准备使用组合损失&#xff0c;其中有2个或者多个损失函数。准备对其进行加权并线性叠加。但想让这些权重进行自我学习&#xff0c;更新迭代成最优加权组合。 目录 1、构建组合损失类 2、调用组合损失类 3、为其构建优化器 …

filebeat日常使用.

先决条件(已经安装好filebeatelasticsearch) 详情可以参考官网,或者 虚拟机部署elasticsearch集群-CSDN博客 centos7 使用rpm包部署filebeat-CSDN博客 filebeat配置文件 标准输入console输出 (1)编写测试的配置⽂件 mkdir /etc/filebeat/config [rootelk101 /tmp]$vim /et…

练习 15 Web [极客大挑战 2019]Knife

因为没有按顺序刷题&#xff0c;这道送分题 要知道两个点 1.什么是“一句话木马” 2.什么是“菜刀” or“蚁剑” 蚁剑连接就行 flag{1b894a2d-8df1-4b06-9054-e90d73257006}