UE4 调试输出的Log日志非常有用!通过解读Log信息,往往是解决问题的关键手段。
但是,很久以来一直好奇Log开头 时间戳后面的数字是什么意思,搜索百度 国外网站,官网文档,都没有具体的解说,困惑了许久。。。如下图所示。

UE 调试 输出 Log 日志 开头内容
通过自己查看UE源代码终于弄清楚了是什么意思!!!在此与童鞋们分享,希望可以解答被同样问题困惑的童鞋。。
第一个[ ]里面记录的自然是log时间了,第二个[ ]里面记录的是log当前【帧数】!!
只是帧数会从0帧增大到无穷大帧,所以这里显示的是:实际帧数%1000
也就是实际帧数除1000的余数!!它永远在0~999帧之间循环。 这样做是非常合理的选择,既能分辨不同处理之间的帧差,又不至于log信息的数字过大。
具体计算的源代码如下:
注意其中的:(GFrameCounter % 1000)就是这个帧数的计算,前面应该是时间戳计算。
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