日志
2024年1月7日 2024年1月11日
日志宏
UE_LOG
在代码中使用日志宏, 在运行时输出日志
使用宏时, 给出日志类别和日志级别
比较日志级别与日志类别的编译级别和打印级别,在编译时确定是否编译该日志,运行时是否输出该日志:
- 当日志级别低于日志类别的编译级别,该日志不会被编译
- 当日志级别低于日志类别的打印级别,该日志不会被输出
UE_LOG
CategoryName | 日志类别 |
Verbosity | 日志级别 |
Format | 文本格式 |
-
日志级别
虚幻引擎定义了日志级别的枚举类常用的有Log,Display,Warning和Error
在编辑器的输出日志窗口,不同级别的日志以不同颜色显示
-
文本格式 Format
Format中的%s
匹配使用TEXT宏封装的C风格字符串
输出格式
- 当日志级别小于等于Log时
CategoryName: TEXT
- 当日志级别大于Log时,输出日志级别
CategoryName: Verbosity: TEXT
日志级别
UE5/Engine/Source/Runtime/Core/Public/Logging/LogVerbosity.h
使用枚举类型 ELogVerbosity
日志级别数值越大,级别越低
使用全局日志类别LogTemp
调试时输出日志,可以使用全局日志类别LogTemp,也可以使用自定义的静态日志类别
- | |
---|---|
全局日志类别 | LogTemp |
自定义日志类别 | 使用DEFINE_LOG_CATEGORY_STATIC宏在源文件中定义 |
添加函数成员
SimpleGeometry.cpp
private
在BeginPlay中调用
1void ASimpleGeometry::UseLogTemp() 2{ 3 UE_LOG(LogTemp, Log, TEXT("Hello Unreal!")); 4 UE_LOG(LogTemp, Display, TEXT("Hello Unreal!")); 5 UE_LOG(LogTemp, Warning, TEXT("Hello Unreal!")); 6 UE_LOG(LogTemp, Error, TEXT("Hello Unreal!")); 7}
自定义日志类别
Engine/Source/Runtime/Core/Public/Logging/LogMacros.h
虚幻C++为自己的模块定义了日志类别
每个模块可以有自己的日志类别,定位问题更方便
使用 DEFINE_LOG_CATEGORY_STATIC
宏定义静态日志类别
静态日志类别只能在定义所在源文件内使用
定义日志类别时,需给出对应的编译级别和打印级别:
- 虚幻C++提供日志级别枚举类ELogVerbosity
- 数值越大,级别越低
- 常用的日志级别 Error > Warning > Display > Log
- 建议将编译级别和打印级别均设为All
SimpleGeometry.cpp
1DEFINE_LOG_CATEGORY_STATIC(LogSimpleGeometry, All, All)
DEFINE_LOG_CATEGORY_STATIC
- | ||
---|---|---|
CategoryName | 日志类别 | |
DefaultVerbosity | 打印级别 | 输出日志时,给定日志级别小于打印级别时,不予打印 |
CompileTimeVerbosity | 编译级别 | 输出日志时,给定日志级别小于编译级别时,该语句不予编译 |
使用自定义日志类别输出日志
添加函数成员
SimpleGeometry.cpp
private
在BeginPlay中调用
1void ASimpleGeometry::UseStaticLogCategory() 2{ 3 UE_LOG(LogSimpleGeometry, Display, TEXT("Name: %s"), *GetName()); 4}
全局日志类别的定义
仅供了解
-
虚幻C++使用
DECLARE_LOG_CATEGORY_EXTERN
宏为各个模块定义了自有日志类别 -
使用DECLARE_LOG_CATEGORY_EXTERN定义的日志类别,编译级别均为All,即无条件编译
-
未为自己的模块定义日志类别时, 可以使用LogTemp输出临时日志, 用以调试
LogTemp
打印级别为Log: 日志级别不低于Log时打印
编译级别为All: 无条件编译1UE_LOG(LogTemp, Log, TEXT("Hello Unreal!")); 2UE_LOG(LogTemp, Display, TEXT("Hello Unreal!")); 3UE_LOG(LogTemp, Warning, TEXT("Hello Unreal!")); 4UE_LOG(LogTemp, Error, TEXT("Hello Unreal!"));
日志存放路径
操作系统 | |
---|---|
Windows | TheBasics/Saved/Logs |
MacOS | /Users/XX/Library/Logs/Unreal Engine/ShootTrainingEditor |
在输出日志窗口查看日志
可通过日志类别和日志级别筛选日志
C++实现在屏幕输出日志
包含头文件
1#include "Engine/Engine.h"
在屏幕输出信息
-
通过指向UEngine对象的全局指针输出信息
-
添加函数成员
SimpleGeometry.cpp
private
在BeginPlay中调用
1void ASimpleGeometry::PrintLogOnScreen() 2 { 3 if (GEngine) 4 { 5 GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Orange, TEXT("Hello")); 6 GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("World!")); 7 } 8 }