UE4 调试输出 Log日志中 时间戳后面的数字所代表的意思:【帧数】
xuni_xiaowei
2022年08月16日 21:10

UE4  调试输出的Log日志非常有用!通过解读Log信息,往往是解决问题的关键手段。

但是,很久以来一直好奇Log开头 时间戳后面的数字是什么意思,搜索百度 国外网站,官网文档,都没有具体的解说,困惑了许久。。。如下图所示。

UE 调试 输出 Log 日志 开头内容

通过自己查看UE源代码终于弄清楚了是什么意思!!!在此与童鞋们分享,希望可以解答被同样问题困惑的童鞋。。

第一个[ ]里面记录的自然是log时间了,第二个[ ]里面记录的是log当前【帧数】!!

只是帧数会从0帧增大到无穷大帧,所以这里显示的是:实际帧数%1000

也就是实际帧数除1000的余数!!它永远在0~999帧之间循环。 这样做是非常合理的选择,既能分辨不同处理之间的帧差,又不至于log信息的数字过大。

具体计算的源代码如下:

注意其中的:(GFrameCounter % 1000)就是这个帧数的计算,前面应该是时间戳计算。

代码块
JavaScript
自动换行
复制代码
FString FOutputDeviceHelper::FormatLogLine( ELogVerbosity::Type Verbosity, const class FName& Category, const TCHAR* Message /*= nullptr*/, ELogTimes::Type LogTime /*= ELogTimes::None*/, const double Time /*= -1.0*/ )
{
	const bool bShowCategory = GPrintLogCategory && Category != NAME_None;
	FString Format;

	switch (LogTime)
	{
		case ELogTimes::SinceGStartTime:
		{																	
			const double RealTime = Time == -1.0f ? FPlatformTime::Seconds() - GStartTime : Time;
			Format = FString::Printf( TEXT( "[%07.2f][%3llu]" ), RealTime, GFrameCounter % 1000);
			break;
		}

		case ELogTimes::UTC:
			Format = FString::Printf(TEXT("[%s][%3llu]"), *FDateTime::UtcNow().ToString(TEXT("%Y.%m.%d-%H.%M.%S:%s")), GFrameCounter % 1000);
			break;

		case ELogTimes::Local:
			Format = FString::Printf(TEXT("[%s][%3llu]"), *FDateTime::Now().ToString(TEXT("%Y.%m.%d-%H.%M.%S:%s")), GFrameCounter % 1000);
			break;

		case ELogTimes::Timecode:
			Format = FString::Printf(TEXT("[%s][%3llu]"), *FApp::GetTimecode().ToString(), GFrameCounter % 1000);
			break;

		default:
			break;
	}	

	if (bShowCategory)
	{
		Format += Category.ToString();
		Format += TEXT(": ");

		if (GPrintLogVerbosity && Verbosity != ELogVerbosity::Log)
		{
			Format += VerbosityToString(Verbosity);
			Format += TEXT(": ");
		}
	}
	else if (GPrintLogVerbosity && Verbosity != ELogVerbosity::Log)
	{
#if !HACK_HEADER_GENERATOR
		Format += VerbosityToString(Verbosity);
		Format += TEXT(": ");
#endif
	}

	if (Message)
	{
		Format += Message;
	}
	return Format;
}
复制成功

本人查阅的是UE4.26版 源代码,具体位置如下,有兴趣的童鞋可以去查看研究一下

{UEInstallRoot}\Engine\Source\Runtime\Core\Private\Misc\OutputDeviceHelper.cpp

方法函数:FOutputDeviceHelper::FormatLogLine