当前位置: 首页 > news >正文

UE_C++ —— Logging in Unreal

目录

一,UE_LOG

Log Verbosity

Console Commands

Logging Fundamental Data Types

Define Your Own Log Category

二,UE_LOGFMT

On-screen debug messages


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

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

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

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

一,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

        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 是要显示的消息;可以像使用日志那样,在屏幕调试消息中使用格式说明符和变量;

相关文章:

  • 初识XML
  • LeetCode 热题 100 206. 反转链表
  • ASP.NET Core Clean Architecture
  • 如何选择适合自己电脑的本地部署模型,模型的大小与b之间的关系,模型参数,量化Q
  • 嵌入式之内存管理
  • 【Git】多人协作
  • 【c++】【线程池】线程池模式
  • Python常见面试题的详解16
  • DeepSeek掘金——基于DeepSeek-R1构建文档问答机器人
  • C 语言文件操作
  • Seata1.5.2学习(二)——使用分布式事务锁@GlobalLock
  • 微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)
  • Python--函数入门
  • Docker 网络详解
  • 正则表达式--元字符-特殊符号(5)
  • vue+element-plus简洁完美实现淘宝网站模板
  • 【STM32】内存管理
  • UE_C++ —— Delegates
  • 网络安全营运周报
  • 【Linux系统编程】网络编程
  • 网站上的网站地图怎么做/制作网页的步骤
  • 手机网站有哪些类型/石家庄网络推广平台
  • 网站用户黏度表现在/项目推广计划书
  • 定制开发网站的公司/专业做网站的公司
  • 宣传片制作公司南京/宁波优化网站哪家好
  • 丰润区建设局网站/app开发成本预算表