UE_C++ —— Logging in Unreal

news/2025/2/24 9:24:43

目录

UE_LOG-toc" name="tableOfContents" style="margin-left:80px">一,UE_LOG

Log Verbosity

Console Commands

Logging Fundamental Data Types

Define Your Own Log Category

UE_LOGFMT-toc" name="tableOfContents" style="margin-left:80px">二,UE_LOGFMT

On-screen debug messages


        日志是一种非常实用的调试工具,可以详细说明代码当前的执行逻辑;可以检查函数之间传递的数据值,并报告潜在的问题;

  • 引擎中的日志提供了多种方法,来有序记录运行时特定时刻的事件、函数调用和变量值;

  • 在 Window > Output Log 查看编辑器中的日志;

  • 日志保存在项目 Saved/Logs 目录的 .txt 文件中;

UE_LOG" name="%E4%B8%80%EF%BC%8CUE_LOG" style="background-color:transparent">一,UE_LOG

UE_LOG 是一个将格式化消息记录到日志文件中的宏;

UE_LOG(LogTemp, Warning, TEXT("Hello World"));
  • 第一个输入参数 LogTemp 是提供给 DEFINE_LOG_CATEGORY 宏的类别名称;可在位于 CoreGlobals.h 的引擎中找到这些类别;可自行创建自定义日志记录类别;

  • 第二个输入参数 Warning 是一个日志详细级别,用于将警告打印到控制台和日志文件中;可设置不同的日志详细程度,调整日志的换行模式,或者设置日志的文本颜色;

  • 第三个输入参数 Text 是C语言库函数printf样式中字符串文字的格式;

Log Verbosity

        ELogVerbosity 是一个定义日志记录系统日志详细级别的枚举;它定义了额外的非日志详细级别,允许给定日志换行或设置日志文本的颜色;

EnumDescription
Fatal始终将致命错误打印到控制台和日志文件,然后出现崩溃(即使禁用日志);
Error将错误打印到控制台和日志文件;Commandlet和编辑器会收集并报告错误;错误消息导致commandlet故障;
Warning将警告打印到控制台和日志文件;Commandlet和编辑器会收集并报告警告;
Display将消息打印到控制台和日志文件;
Log将消息打印到日志文件,但不打印到控制台;
Verbose如为给定类别启用了冗长日志记录,则将冗长消息打印到日志文件;这通常用于详细日志记录;
VeryVerbose将冗长消息打印到日志文件;如启用了极其冗长日志记录,则这将用于详细日志记录,否则将产生垃圾信息输出;
Console Commands

使用 -LogCmds= 时,可以从命令行更改不同日志类别的冗长度;

-LogCmds="LogDerivedDataCache Verbose"  

可以使用此命令指定多个类别,包括可将每个日志类别切换到特定日志详细级别的"全部"类别;

Logging Fundamental Data Types
Data TypeExample
Fstring
UE_LOG(LogTemp, Warning, TEXT("An Actor's name is %s"), *ExampleActor->GetName());
Bool
UE_LOG(LogTemp, Warning, TEXT("The boolean value is %s"), ( bExampleBool ? TEXT("true"): TEXT("false") ));
Integer
UE_LOG(LogTemp, Warning, TEXT("The integer value is: %d"), ExampleInteger);
Float
UE_LOG(LogTemp, Warning, TEXT("The float value is: %f"), ExampleFloat);
FVector
UE_LOG(LogTemp, Warning, TEXT("The vector value is: %s"), *ExampleVector.ToString());
Multiple Specifiers
UE_LOG(LogTemp, Warning, TEXT("Current values are: vector %s, float %f, and integer %d"), *ExampleVector.ToString(), ExampleFloat, ExampleInteger);
Define Your Own Log Category

        可自行定义日志类别,并将其用在C++代码示例中;如示例有多个文件或框架需要进行不同的分类,此功能可能会很有用;

在相关的头文件中,在include指令下方添加以下内容:

DECLARE_LOG_CATEGORY_EXTERN(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, All);

其中 <LOG_CATEGORY> 是自定义日志类别字符串,和以下表格值之一:

Log verbosity levels
Verbosity LevelPrinted in ConsolePrinted in Editor LogText ColorAdditional Information
FatalYNANA会话崩溃;
ErrorYYRedNA
WarningYYYellowNA
DisplayYYGreyNA
LogNYGreyNA
VerboseNNNANA
VeryVerboseNNNA可使用日志掩码和特殊枚举值设置文本颜色;

在相关的C++文件中,在include指令下方添加以下内容:

DEFINE_LOG_CATEGORY(<LOG_CATEGORY>);

注,可以继承 FOutputDevice,以实现自己的输出;

UE_LOGFMT" name="%E4%BA%8C%EF%BC%8CUE_LOGFMT">二,UE_LOGFMT

        UE_LOGFMT 会记录结构化日志事件,支持 Positional 或 Named 参数,但不能混合使用两种类型;要使用此宏,需要包含 Logging/StructeredLog.h 库声明;

注,UE5.2中引入了 UE_LOGFMT 宏,检查当前的引擎是否为最新版本;

Parameter NameDescription
Positional

字段值必须与格式引用的字段完全匹配;

UE_LOGFMT(LogCore, Warning, "Loading `{Name}` failed with error {Error}", Package->GetName(),  ErrorCode);
Named

字段值必须包含格式引用的每个字段;顺序无关紧要,而且允许使用额外字段;

UE_LOGFMT(LogCore, Warning, "Loading `{Name}` failed with error {Error}",("Name", Package->GetName()), ("Error", ErrorCode),("Flags", LoadFlags));

字段名称必须匹配"[A-Za-z0-9_]+"格式,并且在此日志事件中必须唯一;字段值使用SerializeForLog或运算符 <<(FCbWriter&, FieldType) 进行序列化;

  • CategoryName :DECLARE_LOG_CATEGORY_* 声明的日志类别的名称;

  • Verbosity :ELogVerbosity 中的日志详细级别的名称;

  • Format :以 FLogTemplate 样式格式化字符串;

  • Fields[0-16] : 0到16字段或字段值;

On-screen debug messages

屏幕调试消息也能起到很好的信息传递作用,可使用以下代码添加屏幕调试消息:

if (GEngine)
{
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, TEXT("This is an Example on-screen debug message."));
}
  • 第一个输入参数 key 会获取一个唯一的整型值,用于防止同一消息被多次添加;

  • 第二个输入参数 TimeToDisplay 会获取一个浮点值,用于表示消息在显示多少秒后消失;

  • 第三个输入参数 DisplayColor 用于指定文本显示的颜色;

  • 第四个输入参数 DebugMessage 是要显示的消息;可以像使用日志那样,在屏幕调试消息中使用格式说明符和变量;


http://www.niftyadmin.cn/n/5864173.html

相关文章

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成&#xff1a; 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意&#xff1a;此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…

【嵌入式Linux应用开发基础】多线程编程

目录 一、基本概念 二、相关 API 2.1. 线程创建 2.2. 线程等待 2.3. 线程退出 2.4. 互斥锁 2.5. 条件变量 2.6. 使用示例 三、线程的属性设置 四、多线程编程中的问题和同步 五、多线程编程的实践 六、参考资料 在嵌入式 Linux 应用开发中&#xff0c;多线…

‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级

云端部署 引言&#xff1a;当数据生产力遇上云端智能化 2025年2月23日&#xff0c;国内领先的数据服务商挖数据平台宣布与人工智能巨头DeepSeek达成战略合作&#xff0c;正式推出“一键云端部署”功能。这一功能以API&#xff08;应用程序接口&#xff09;为核心&#xff0c;通…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

eNSP下载安装(eNsp、WinPcap、Wireshark、VirtualBox下载安装)

一、下载 下载网址&#xff1a;https://cloud.grbj.cn/softlink/eNSP%20V100R003C00SPC100%20Setup.exe 备用临时网址&#xff1a;https://linshi.grbj.cn/abdpana/softlink 二、准备工作 系统要求 关闭防火墙 三、安装 3.1安装WinPcap 基本都是下一步&#xff0c;双击&…

R与RStudio简介及安装

目录 一、R与RStudio关系 二、R简介 2.1. 发展历史 2.2. R语言特点 三、安装指南 3.1 R安装指南 3.2 R studio安装指南 一、R与RStudio关系 R是统计领域广泛使用的工具&#xff0c;属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是 用于统计计算和统计绘图…

旋转位置编码(ROPE)详解:从Transformer到现代前沿

旋转位置编码&#xff08;ROPE&#xff09;详解&#xff1a;从Transformer到现代前沿 标签&#xff1a;NLP, Transformer, 位置编码, ROPE, 深度学习, 机器学习 摘要&#xff1a;本文详细介绍了旋转位置编码&#xff08;ROPE&#xff09;在Transformer模型中的应用&#xff0…

基于GWO灰狼优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 无线传感器网络&#xff08;Wireless Sensor Network, WSN&#xff09;由大量分布式传感器节点组成&#xff0c;用于监测物理或环境状况。节点部署是 WSN 的关键问…