UE4--Log写入到单独文件中
Posted cartzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4--Log写入到单独文件中相关的知识,希望对你有一定的参考价值。
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
作者:cartzhang
把LOG写入到单个文件中。
把所有的Log都写入到本地save文件夹下,这个是默认路径,
所有都在一起,看起来很不方便。
自己写了一个,可以在UE中直接使用。
代码很简单。
#define CZ_LOG_S(FileName,Value) \\
\\
static bool IsNewLog = true; \\
FString SaveDirectory = FPaths::GameSavedDir(); \\
SaveDirectory.Append("Logs/CZSave/"); \\
FString TmpFileName = FileName; \\
TmpFileName.Append(".log.txt"); \\
\\
/** CreateDirectoryTree returns true if the destination directory existed prior to call or has been created during the call.*/ \\
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); \\
CA_CONSTANT_IF(!PlatformFile.DirectoryExists(*SaveDirectory)) \\
PlatformFile.CreateDirectoryTree(*SaveDirectory); \\
\\
/** Get absolute file path*/ \\
FString AbsoluteFilePath = SaveDirectory + "/" + TmpFileName; \\
FFileHelper::EEncodingOptions::Type EncodingOptions = FFileHelper::EEncodingOptions::AutoDetect; \\
IFileManager* FileManager = &IFileManager::Get(); \\
uint32 WriteFlags = (uint32)(EFileWrite::FILEWRITE_Append); \\
/** if file already exist,change name and save it.*/ \\
CA_CONSTANT_IF(PlatformFile.FileExists(*AbsoluteFilePath) && IsNewLog) \\
\\
IsNewLog = false; \\
FString AbsoluteDestinationPath = SaveDirectory + "/" + FDateTime::Now().ToString() + "-" + TmpFileName; \\
PlatformFile.MoveFile(*AbsoluteDestinationPath, *AbsoluteFilePath); \\
PlatformFile.DeleteFile(*AbsoluteFilePath); \\
\\
\\
FString TextToSave = FDateTime::Now().ToString(); \\
TextToSave.Append("-"); \\
TextToSave.Append(Value); \\
TextToSave.Append("\\r\\n"); \\
FFileHelper::SaveStringToFile(TextToSave, *AbsoluteFilePath, EncodingOptions, FileManager, WriteFlags); \\
\\
\\
//
static FORCEINLINE void CZ_LOG(FString FileName, const TCHAR* Format, ...)
#if UE_BUILD_DEBUG || UE_EDITOR || WITH_EDITOR
// change whenshipping.
#endif
TCHAR TempStr[1024];
va_list Ptr;
va_start(Ptr, Format);
FCString::GetVarArgs(TempStr, ARRAY_COUNT(TempStr), ARRAY_COUNT(TempStr) - 1, Format, Ptr);
va_end(Ptr);
PW_LOG_S(FileName, FString(TempStr));
怎么使用呢?
你可以添加到你的某个通用头文件中,或单独的制作一个Head文件中,在其他地方引用就可以用了。
具体用法,与UE4本身的UE_LOG完全一致。
CZ_LOG_S("CZLog", *GetFName().ToString());
CZ_LOG("CZLog", TEXT(" MACRO this is just call string no format"));
CZ_LOG("CZLog", TEXT("MACRO has health %d, which is percent of total health2 : %s"), Health, *GetFName().ToString());
运行完毕后,就可以发现Saved/Logs文件夹下多了个文件,就是CZSave,里面保存了你CZLog文件,方便好用吧。
已知bug
目前已知bug,就是在多输入情况下,需要完全匹配,意思就是不能%s,而输入的是一个整型或其他类型的变量,这样会报错的。
不过,不打算改。
严谨的人完全按照UE4的格式,就没有问题。
说明
说明:目前测试版本为4.16.1,其他版本也应能可以。使用的都是C++原有的函数和方法。
喜欢记得点个关注,点个赞!
以上是关于UE4--Log写入到单独文件中的主要内容,如果未能解决你的问题,请参考以下文章