- 一个可跨平台,简单,轻量,易维护的UE日志工具
- 解决UE项目打包发行版后,查看项目中手动添加的PrintLog等相关操作,无法轻易查看日志的问题
- 基于WebSocket通信,可以本地使用,也可以部署云端
UnrealLogger
- UE_Logger
- node_modules
- logger.js
Logger Server - package.json
- package-lock.json
- websocat.exe
Windows Test Websocket Tool
- UnrealLogger
UE Plugin - .gitignore
- README.md
Logger Server:使用nodejs开发
UE Plugin:使用UE 5.2开发,纯源码,需要使用C++项目编译,只用了UE模块,理论上该插件也支持全平台,足够多的UE版本
websocat.exe:启动Logger Server后,在Windows平台,可以简单使用该测试是否启用成功
- 系统运行环境需要
nodejs, npm等 - UE项目是C++项目,添加该插件后,项目编译成功
使用控制台进入UE_Logger目录
运行node logger.js启动Logger Server
- 默认启动的是
127.0.0.1:6666, 刷新间隔16ms - 使用带参命令
node logger.js 127.0.0.1 7777 100可以该Logger Server的IP, Port, 刷新间隔 node logger.js <IP> <Port> <Interval>
启动后,在Windows环境下,可以直接使用websocat.exe测试
注意:使用前,先确保 Logger Server已经启动,并测试通过
如果:先启动了UE 客户端,再启动 Logger Server,应该是无法连接的,可以在客户端程序中,可以手动或特定时机触发 MakeLoggerSetting方法
初始化Logger System:初始化相关配置和启动WebSocket服务

查看PrintLog方法

Log Type介绍:
- Normal -> level: 0
- Warning -> level: 1
- Error -> level:2
Log Setting:

Log Screen Color,Log Screen Time和UE printString同理
测试蓝图:

运行结果:


结束打印



如果你电脑挂了代理,这个应该是代理的问题,关掉代理再测试
- 测试了一个Linux服务器,开发防火墙的
6666端口 - 配置运行环境
node logger.js 0.0.0.0:6666- 在本地主机(windows):
websocat.exe ws://公网IP:6666即可


多了一个IsUseWorldContextName,目的是方便查看日志打印时,可以看见这条日志打印的所在位置,比如:UI, Actor, Level等等;
优化了Logger Server的打印样式,使用绿色显示连接状态


发送给Logger Server的日志,默认增加了时间戳UE 发送日志的时间

完善蓝图的使用体验,默认(WorldContextObject=Self, IsUseWorldContextName=True, LogType=Normal, Setting="Logger", LogScreenColor="0.0f, 0.66f, 1.0f, 1.0f", LogScreenTime=2.0f)
节点默认只显示LogText,LogSetting不再是结构体,而是默认折叠起来,和UE蓝图 printString节点相同

优化了PrintLog节点默认的展开参数为:LogType,LogText,方便快速设置打印日志的类型,打印目标默认为Screen, UE_LOG, UnrealLogger修复了,传入Json字符串,无法正确解析的问题(需要对传入字符内,所有的""做转义)
- 修复打印
json的相关问题 - 新增节点
SetGlobalSetting,可以全局控制打印日志到何处
经过一段时间的使用,发现LogType还是默认UE_Log-Logger比较舒服

修改节点MakeLoggerSetting
新增字段:
IsEnableQueueMode:是否开启队列模式QueueCheckIntervalSeconds:队列检查的间隔时间
此前在GameInstance中的Init()使用,可能时机过早,丢失了日志信息;
加入队列模式后,同样的情况下,日志不会丢失,而是进入队列中,当初始化完毕可以正常使用之后的新打印,会触发队列检查,将此前无法正常打印的信息打印出来
总之:在GameInstance的Init()之后MakeLoggerSetting()时机过早;解决方案:

这样使用,比较靠谱,如果是在GameMode,PlayerController或其它A*的类型对象中使用,则不必担心这个问题
补充了OnConnected 和OnConnectionError 的回调,结合2025-03-05 的 方案,处理在UE 中过早使用PrintLog 需要Delay 一段时间的问题,可以在蓝图中调用完MakeLoggerSetting() 之后,从蓝图子系统LoggerSystem 中进行委托绑定
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FUnrealLoggerConnectedServer,bool, IsConnected);voidULoggerSystem::OnConnected(){OnUnrealLoggerConnectedServer.Broadcast(true);UE_LOG(Logger, Log,TEXT("WebSocket connected!"));}voidULoggerSystem::OnConnectionError(const FString& Error){OnUnrealLoggerConnectedServer.Broadcast(false);UE_LOG(Logger, Error,TEXT("Connection error: %s"), *Error);}
更新了UnrealLogger - LoggerSystem 中的函数MakeLoggerSetting,新增了TagName 标记,确保服务端UE_Logger 在日志中能辨别打印的日志消息源自于哪个客户端,默认为Unknown


在UE_Logger 中更新了,多客户端 Websocket 链接实例管理,目前可以通过 客户端的TagName 正常区别客户端,同时也客户端和服务器建立链接和断开时,同UID进行区分管理
