如何使用UE_LOG(转)

ue5 c++学习笔记-01使用UE_LOG宏打印日志 ue5 c++学习笔记,个人记录 阅读详情
在学习UE4的时候发现,想要在C++代码中输出一个log不知道要怎么办,搜了一下,发现有一个UE_LOG()的相关宏,不过好像用法很复杂.在网上找到了下边的说明,不过我代码可以直接使用C语言的printf()函数来输出log.
如何使用UE_LOG(转) - ♂苹果 - 眼睛想旅行
 
上边的代码,我的printf("aaa");没有报错,可见UE4对C语言和C++所有的东西都是原生支持的.
先上官网的使用说明:
下边是转来的UE_LOG()用法的使用说明:

在Unreal Engine 4中,打Log很方便,可以使用宏:

1
2
UE_LOG ( LogTemp , Warning , TEXT ( "Your message" ) ) ;
 

但是使用之前需要先定义Log Category,Category会在Log中体现出来,以便在茫茫Log中更容易区分其作用或所属模块。
如果想定义只在一个CPP文件中使用的Category,不希望被其他类使用,可以定义一个Static的Category:

1
2
DEFINE_LOG_CATEGORY_STATIC ( CategoryName , Log , All ) ;
 

如果想定义一个‘Public’的Category,并且在全局生效,不管是static函数还是其他类都可以使用,就需要在头文件中声明一个Category,并在CPP中定义,每个用到的CPP文件都需要include该头文件:

1
2
3
4
5
6
7
8
9
10
// in A.h
DECLARE_LOG_CATEGORY_EXTERN ( CategoryName , Log , All ) // 声明一个Category为extern,避免多个文件使用此头文件时重复声明
 
// in A.cpp
#include "A.h"
DEFINE_LOG_CATEGORY ( CategoryName ) // 定义该Category,全局仅需一份
 
// in B.cpp
#include "A.h" // 由于之前声明为extern,使用者引入头文件即可使用在A.cpp中的定义
 

如果想给某个定义一个专属的Category,可以使用:

1
2
3
4
5
6
7
8
9
// in A.h
class A
{
DECLARE_LOG_CATEGORY_CLASS ( CategoryName , Log , All ) ;
} ;
 
// in A.cpp
DEFINE_LOG_CATEGORY_CLASS ( A , CategoryName ) ;
 

定义好Log Category之后就可以使用 de style="border: 0px; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; line-height: normal;" >UE_LOG de>了,除了最前面例子中的用法, de style="border: 0px; font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 13px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; line-height: normal;" >UE_LOG de>的用法和C中的printf类似,支持字符串Format,例如:

1
2
3
4
UE_LOG ( CategoryName , Warning , TEXT ( "MyCharacter's Health is %d" ) , MyCharacter - & gt ; Health ) ;
UE_LOG ( CategoryName , Warning , TEXT ( "MyCharacter's Health is %f" ) , MyCharacter - & gt ; Health ) ;
UE_LOG ( CategoryName , Warning , TEXT ( "MyCharacter's Name is %s" ) , * MyCharacter - & gt ; GetName ( ) ) ;
 

‘UE_LOG’和声明或定义Log Category的宏中提到的’Log’,’Warning’,’All’等,是ELogVerbosity中定义的枚举,具体含义可参考下面的源码。

相关源码:

声明和定义Log Category的宏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* A macro to declare a logging category as a C++ "extern"
* @param CategoryName, category to declare
* @param DefaultVerbosity, default run time verbosity
* @param CompileTimeVerbosity, maximum verbosity to compile into the code
**/
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
extern struct FLogCategory ##CategoryName : public FLogCategory<ELogVerbosity::DefaultVerbosity, ELogVerbosity::CompileTimeVerbosity>
{
FORCEINLINE FLogCategory ##CategoryName() : FLogCategory(TEXT(#CategoryName)) {}
} CategoryName ;
 
/**
* A macro to define a logging category, usually paired with DECLARE_LOG_CATEGORY_EXTERN from the header.
* @param CategoryName, category to define
**/
#define DEFINE_LOG_CATEGORY(CategoryName) FLogCategory##CategoryName CategoryName;
 
/**
* A macro to define a logging category as a C++ "static"
* @param CategoryName, category to declare
* @param DefaultVerbosity, default run time verbosity
* @param CompileTimeVerbosity, maximum verbosity to compile into the code
**/
#define DEFINE_LOG_CATEGORY_STATIC(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
static struct FLogCategory ##CategoryName : public FLogCategory<ELogVerbosity::DefaultVerbosity, ELogVerbosity::CompileTimeVerbosity>
{
FORCEINLINE FLogCategory ##CategoryName() : FLogCategory(TEXT(#CategoryName)) {}
} CategoryName ;
 
/**
* A macro to declare a logging category as a C++ "class static"
* @param CategoryName, category to declare
* @param DefaultVerbosity, default run time verbosity
* @param CompileTimeVerbosity, maximum verbosity to compile into the code
**/
#define DECLARE_LOG_CATEGORY_CLASS(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
DEFINE_LOG_CATEGORY_STATIC ( CategoryName , DefaultVerbosity , CompileTimeVerbosity )
 
/**
* A macro to define a logging category, usually paired with DECLARE_LOG_CATEGORY_CLASS from the header.
* @param CategoryName, category to definee
**/
#define DEFINE_LOG_CATEGORY_CLASS(Class, CategoryName) Class::FLogCategory##CategoryName Class::CategoryName;
 

ELogVerbosity中的枚举:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
namespace ELogVerbosity
{
enum Type
{
/** Not used */
NoLogging = 0 ,
 
/** Always prints s fatal error to console (and log file) and crashes (even if logging is disabled) */
Fatal ,
 
/**
* Prints an error to console (and log file).
* Commandlets and the editor collect and report errors. Error messages result in commandlet failure.
*/
Error ,
 
/**
* Prints a warning to console (and log file).
* Commandlets and the editor collect and report warnings. Warnings can be treated as an error.
*/
Warning ,
 
/** Prints a message to console (and log file) */
Display ,
 
/** Prints a message to a log file (does not print to console) */
Log ,
 
/**
* Prints a verbose message to a log file (if Verbose logging is enabled for the given category,
* usually used for detailed logging)
*/
Verbose ,
 
/**
* Prints a verbose message to a log file (if VeryVerbose logging is enabled,
* usually used for detailed logging that would otherwise spam output)
*/
VeryVerbose ,
 
// Log masks and special Enum values
 
All = VeryVerbose ,
NumVerbosity ,
VerbosityMask = 0xf ,
SetColor = 0x40 , // not actually a verbosity, used to set the color of an output device
BreakOnLog = 0x80
} ;
}
[UE4]UE4输出日记到屏幕/控制台(UE_LOG)与自定义日记类别 1.UE4输出日记到屏幕/控制台(UE_LOG) 2.自定义日记类别 阅读详情

相关推荐

使用UE_LOG输出日志[基础蓝图转C++]

一.输出日志及查看日志信息1.在上篇中创建的Actor类ACppActor也可以自行创建一个基类为Actor的C++类.在Beginplay中,添加以下代码:UE_LOG(LogTemp, Log, TEXT("Beginplay Normal log") ); UE_LOG(LogTemp, Warning, TEXT("Beginplay warning log") ); UE_LOG(LogTemp, Error, TEXT("Beginplay Error log") ); 代码如下图 2.编译成功

RFDO_FK的博客 1812

UE C++学习(一)之 Log,创建,定时器,UFUNCTION等

使用DEFINE_LOG_STATIC//自定义一个log分类:LogCustom。

qq_58814201的博客 2292

虚幻引擎编程基础(一)

虚幻引擎编程基础(一) 文章目录虚幻引擎编程基础(一)一、前言二、容器2.1 TArray2.1.1 创建动态数组容器2.1.2 增加元素2.1.3 删除元素2.1.4 查询2.1.5 遍历2.1.6 排序2.2 TMap2.2.1 增加元素2.2.2 删除元素2.2.3 查询2.2.4 排序2.2.5 遍历2.2.6 **TMultiMap**2.3 TSet2.3.1 添加元素2.3.2 删除元素2.3.3 查询2.3.4 遍历2.3.5 两个集合的操作三、字符串转换3.1 FString 转 FNam

【黑键】 4388

小白也能看懂的UE_LOG机制

我们知道Log一般都很多,而且频繁更新,这个过程在底层是通过多线程的方式实现的,有很多Lock读写的操作。作者本人是小白,因此本篇也只面向小白,不会涉及源码,不会使用过多概念性术语,只会讲实现逻辑,如果挑起了你的兴趣,可以自行去深入发掘。,比如Windows,Linux,ISO等,UE告诉我们,它是通过调用对应平台的API来打印log的。一些你可能想到的基本操作,比如,开启Log,Log写入,Log刷新,Device添加删除等都在这里。模板,发送一系列定义的log内容,设备信息,线程信息,调用函数等。

qq_38974905的博客 2683

虚幻引擎(UE4) 日志、打印运行时信息

概述 日志用于引擎及时反馈给我们运行时刻数据和信息。强大的用途不限于如下: 函数是否被调用 算法使用的什么数据 上报错误给开发组或者用户 特定时刻强制运行致命错误(如断言错误)以停止执行程序。 本章将介绍如何在虚幻引擎中输出日志。 目录 获取日志 使用方法 日志详情级别 设置自己的日志类别 使用样例 格式化打印 打印字体的颜色 快速打印提示 其他打印方式 日志关键字 有用的控制台命令 日志命令行 环境变量 配置文件 获取日志 游戏中 为...

刀客 1万+

UnrealEngine学习(02):虚幻引擎编辑器界面详解

好了,以上就是UE界面的整体布局和解释。个人认为基本上懂得各个选项的含义和功能就OK了,主要还是要多做,多动手。t=N7T8UnrealEngine学习(01):安装虚幻引擎https://blog.youkuaiyun.com/zuodingquan666/article/details/141539385。

zuodingquan666的博客 6254

UE4C++中如何打Log

包含头文件   #include "UObject/ConstructorHelpers.h"   UE_LOG(LogTemp, Warning, TEXT("CCCC")); UE_LOG(LogTemp, Log, TEXT("HealthChange:: %s"), *FString::SanitizeFloat(Health));

krozore的博客 3336

虚幻引擎5 Gameplay框架(二)

PlayerController网络机制、客户端连接服务器流程、HUD与UserWidghet类,C++绑定UI控件,C++读取命令行文本

qq_44924388的博客 2371

虚幻引擎UE启用Git后无法构建项目

本文描述的是项目文件包含中文时,启用Git管理后无法构建项目的解决方案。

qq_41719604的博客 1552

虚幻引擎日志避坑指南:为什么你的UE_LOG不显示?5种排查方法

本文针对虚幻引擎开发中常见的UE_LOG日志不显示问题,提供了5种系统性的排查方法。从检查输出窗口是否开启、理解日志级别过滤机制,到正确使用自定义日志类别、区分编辑器与打包环境的差异,并分享了高级诊断工具与实战案例,帮助开发者快速定位并解决日志输出问题。

weixin_29001423的博客 442

虚幻C++入门个人笔记(1)——一些基础、UE_LOG、TArray、翻译转换

vs VS环境配置文件(不用管不要删)Binaries 存放编译生成的结果二进制文件。该目录可以gitignore(可以忽略),每次都会生成编译动态库 中间编译文件(虚幻按模块编译)(编译好的)每个模块会产出一个动态库当工程出了一些问题(热加载出问题),就把动态库全删掉重新生成config 配置文件content 内容文件夹,所有资源和蓝图等都在该目录里。...................

hoppingg的博客 2815

虚幻引擎像素流源码解读

前言假期在家把虚幻引擎像素流的源码有研究了一下,进行了一下总结,本文适合有一定使用虚幻引擎像素流经验的人阅读。源码地址这里研究的是UE5.1的版本,源码位置如下C:\ProgramFiles\EpicGames\UE_5.1\Engine\Plugins\Media\PixelStreamingwebsocket处理像素流和signal服务之间通过websocket进行通信,处理业务的逻辑在F...

1723

虚幻引擎C++开发学习(二)上

虚幻引擎C++开发,通过组件对门增加互动功能: 包括利用触发体积开门和延迟关门; 公布组件参数,使得可以在虚幻引擎中调整参数,开关门的速度和角度参数。

packdge_black的博客 3616

虚幻引擎基础入门(C++) — 【日志输出篇 03】

本文仅仅简单介绍了虚幻引擎中的日志输出使用

子枫 1528

虚幻引擎中的日志系统

在软件项目中,日志一直扮演着一个及其重要的角色。程序员经常依赖它来定位问题,在某些不方便调试的情况下,日志甚至是唯一一个可以依赖的工具。虚幻作为一个游戏引擎,它的强大体现在各个方面,也包括日志系统。在本文里我就引擎提供的三种打日志的方式来介绍这一系统。 提到日志,大概我们第一个想到的就是在输出终端上打印的日志。对于这类日志引擎提供了UE_LOG宏来实现。UE_LOG不仅仅有了种类众多的预定义(Ca...

慎始慎终,勿忘初心 1069

虚幻引擎基础入门(C++) — 【数据类型篇 04】

本文仅仅简单介绍了虚幻引擎中的数据类型的使用

子枫 1755

虚幻引擎C++调试:UE_LOG与OnScreenDebugMessage实战指南

在软件开发中,日志系统是程序运行状态的忠实记录者,其核心原理在于通过代码插桩,在程序执行的关键节点输出结构化信息。相比于依赖特定环境的断点调试,日志的价值在于其非侵入性和可追溯性,能够完整记录程序在测试、线上乃至偶发场景下的运行现场,是定位复杂问题的关键。在游戏开发领域,尤其是虚幻引擎(UE)的C++开发中,高效的日志实践能极大提升调试效率。UE_LOG作为引擎核心日志宏,支持分级(Verbose、Log、Warning、Error)和分类输出,是后台诊断的利器;而GEngine->AddOnScreenD

weixin_26798991的博客 265

安卓设备通过USB串口与STM32单片机通讯之一

这里写自定义目录标题欢迎使用Markdown编辑器`在这里插入代码片`新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器在这里插入代码片 你好下Markdown的基本语法知识。 新的改变 我们对

JGB联合商务组的博客 7245

虚幻引擎4——引擎下载及基本蓝图节点/数组节点详细介绍

一: 虚幻引擎介绍安装 虚幻引擎4 是由游戏EPIC公司虚幻引擎的最新版本。是一个面向下一代游戏机和DirectX 9个人电脑的完整的游戏开发平台,提供了游戏开发者需要的大量的核心技术、数据生成工具和基础支持。 Epic下载 众所周知,虚幻引擎运行于Epic平台之上,所以先要下载Epic,并且注册账号登录,Epic官网地址。 UE4引擎版本下载 创建第一个项目 选择一个版本启动,新建一个...

丨漠河以北丨 7017

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 420

PySpark机器学习生产化陷阱:跨节点依赖问题的7种解决方案

隐式依赖陷阱使用ldd解决方案:在基础镜像中预装和路径冲突终极解法依赖树瘦身技巧用conda-tree可减少40%环境体积PySpark机器学习生产化的核心矛盾在于分布式环境的确定性与灵活性不可兼得。轻量级方案(1-3)牺牲一致性换取灵活性重量级方案(4-6)牺牲灵活性换取确定性混合方案(7)针对特殊场景补充正如某AI平台架构师所言:“环境一致性不是技术问题,而是工程纪律问题选择适合团队当前阶段的方案,建立严格的依赖管理流程,才能让PySpark真正扛起生产环境的大旗。

datacanvas2426的博客 909
上一篇: mac os下svn无法cleanup的解决办法
下一篇: Python添加库模块(转)
woodcol
博客等级 码龄19年 288粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值