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

Unreal Engine UE_LOG

Unreal

  • 🎮 Unreal Engine - UE_LOG
    • 📝 定义
    • 🏛 类/宏关联
    • ⚡ 关键特性
    • 🛠️ 常见配置
    • 📚 使用方法
      • 🔧 基础语法
      • 🔍 示例
    • 🪂 典型应用场景
    • 🔗 与其他组件对比
    • ⚠️ 常见问题与注意事项
    • 🏷 小结

🎮 Unreal Engine - UE_LOG


📝 定义

UE_LOG 是 Unreal Engine 中用于输出日志信息的核心宏,用于在开发过程中调试程序、记录运行状态、追踪错误等。它支持将信息输出到控制台、日志文件(如 Saved/Logs 目录下的日志文件)以及调试器(如 Visual Studio 的输出窗口),并可通过日志级别和日志类别进行过滤管理。


🏛 类/宏关联

UE_LOG 本身是一个宏定义,其实现依赖于 Unreal Engine 的日志系统框架,核心关联组件包括:

  • FLogCategoryBase:日志类别基类,所有自定义日志类别均继承自此
  • ELogVerbosity:日志级别枚举(如 FatalErrorWarning 等)
  • FOutputDevice:日志输出设备基类,负责将日志信息发送到控制台、文件等目标

⚡ 关键特性

  • 分级日志:通过日志级别(FatalErrorWarningDisplayLogVerboseVeryVerbose)控制信息详细程度,便于过滤无关内容
  • 类别管理:支持自定义日志类别(如 LogMyGame),可单独开启/关闭某类日志
  • 跨平台兼容:在 Windows、Mac、Linux 等平台均能稳定输出日志
  • 格式化输出:支持类似 C++ printf 的格式化语法(如 %s%d%f),可输出变量值、对象信息等
  • 调试集成:日志信息可直接显示在编辑器控制台和调试器,便于实时追踪程序流程

🛠️ 常见配置

  • 日志级别设置
    • DefaultEngine.ini 中配置全局或类别日志级别,例如:

      [Core.Log]
      LogMyGame=Verbose  ; 自定义类别 LogMyGame 输出 Verbose 及以上级别日志
      LogTemp=Warning    ; 临时类别 LogTemp 仅输出 Warning 及以上级别日志
    • 通过命令行参数覆盖配置:LogCmds="LogMyGame=VeryVerbose"

  • 日志文件路径:默认存储在项目目录 Saved/Logs/[项目名].log,可通过引擎配置自定义路径

📚 使用方法

🔧 基础语法

UE_LOG(LogCategory, LogVerbosity, FormatString, Parameters...)
  • LogCategory:日志类别(如 LogTemp 临时类别,或自定义类别)
  • LogVerbosity:日志级别(如 ErrorWarning
  • FormatString:格式化字符串
  • Parameters:对应格式化字符串的参数

🔍 示例

  1. 使用临时日志类别

    UE_LOG(LogTemp, Warning, TEXT("Player health: %d"), CurrentHealth);
  2. 自定义日志类别

    • 先在头文件中声明:

      DECLARE_LOG_CATEGORY_EXTERN(LogSpaceShooter, Log, All);
    • 在源文件中定义:

      DEFINE_LOG_CATEGORY(LogSpaceShooter);
    • 使用:

      UE_LOG(LogSpaceShooter, Display, TEXT("Enemy spawned at: %s"), *SpawnLocation.ToString());
  3. 输出致命错误(会导致程序崩溃)

    UE_LOG(LogTemp, Fatal, TEXT("Critical error: Player controller is null!"));

🪂 典型应用场景

  • 🐞 调试阶段输出变量值,验证程序逻辑(如角色位置、属性值变化)
  • 🚨 记录错误信息(如空指针、资源加载失败),便于定位 Bug
  • 📊 追踪程序流程(如关卡切换、事件触发),确认代码执行顺序
  • 🔍 性能分析辅助(如记录函数执行时间)

🔗 与其他组件对比

功能UE_LOGGEngine->AddOnScreenDebugMessage
输出位置控制台、日志文件、调试器游戏屏幕直接显示
信息保留持久化到日志文件一段时间后自动消失
适用场景详细日志记录、调试追踪实时显示关键信息(如坐标、状态)
性能影响较低(可通过级别控制)较高(频繁调用可能影响帧率)

⚠️ 常见问题与注意事项

  • 日志级别滥用:避免在发布版本中保留过多 VerboseVeryVerbose 级别日志,可能增加性能开销和日志文件体积
  • 格式化错误:格式化字符串与参数类型不匹配会导致编译错误或运行时崩溃(如 %d 对应整数,%s 对应 FString 需加 转换)
  • 自定义类别未定义:使用 DECLARE_LOG_CATEGORY_EXTERN 声明的类别必须用 DEFINE_LOG_CATEGORY 定义,否则会链接错误
  • Fatal 级别谨慎使用Fatal 级日志会强制程序崩溃,仅用于不可恢复的致命错误

🏷 小结

  • ✅ UE_LOG 是 Unreal Engine 中最核心的日志工具,支持分级和分类管理
  • ✅ 合理使用日志级别和类别可提高调试效率,便于后期问题排查
  • ✅ 自定义日志类别能让日志更有条理,建议按模块或功能划分(如 LogCombatLogUI
  • ✅ 发布版本前需清理冗余日志,避免敏感信息泄露和性能损耗
http://www.xdnf.cn/news/18658.html

相关文章:

  • 电脑芯片大的32位与64位指的是什么
  • 【数据结构】B+ 树——高度近似于菌丝网络——详细解说与其 C 代码实现
  • 面向RF设计人员的微带贴片天线计算器
  • AI领域的语义空间是什么?
  • ES6变量与解构:let、const与模板字符串全解析
  • 「越短越合法」型滑动窗口
  • 解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别
  • 111、【OS】【Nuttx】【周边】效果呈现方案解析:-print0 选项
  • Linux操作系统编程——网络
  • 第二阶段WinFrom-6:文件对话框,对象的本地保存,序列化与反序列化,CSV文件操作,INI文件读写
  • 08.21总结
  • Claude Code 三类.md文件
  • Day2--HOT100--283. 移动零,11. 盛最多水的容器,15. 三数之和
  • PCB电路设计学习2 元件原理图封装的添加 手工设计元件封装
  • 大型前端项目如何实现css 隔离:利用浏览器原生的 Shadow DOM 完全隔离 DOM 结构与样式...
  • Linux 下的网络编程
  • 学习嵌入式的第二十四天——数据结构——队列和树
  • Git 提交除某个文件外的其他所有文件
  • 微信开发者工具:更改 AppID 失败
  • 嵌入式-EXTI的工作原理和按钮实验-Day19
  • 我从零开始学习C语言(13)- 循环语句 PART2
  • QT-窗口类部件
  • K8S高可用集群
  • K8s的相关知识总结
  • 如何理解面向过程和面向对象,举例说明一下?
  • Qt5 的跨平台开发详细讲解
  • 计算机毕设选题推荐 基于Spark的家庭能源消耗智能分析与可视化系统 基于机器学习的家庭能源消耗预测与可视化系统源码
  • 告别第三方流氓工具,如何实现纯净系统维护
  • DIC技术极端环境高温案例分享——从1600℃的锆合金力学性能测试到3000℃变形测试的DIC测量
  • 手机、电脑屏幕的显示坏点检测和成像原理