UE4--Log写入到单独文件中_ue 日志写入文件_cartzhang的博客-CSDN博客
参考ue4的对应文章,修改代码适应ue5的接口
同时修改了没有文件的时候会创建两个文件的问题
改了备份文件名与ue标准一致,优化了输出格式
添加了子文件夹的功能
#include "Misc/Paths.h"
#include "Misc/FileHelper.h"
#define SG_LOG_S(FileName,PathName,Value) \
{ \
static bool IsNewLog = true; \
FString SaveDirectory = FPaths::ProjectSavedDir(); \
SaveDirectory.Append("Logs/SgLogs/"); \
SaveDirectory.Append(PathName + "/"); \
FString TmpFileName = FileName; \
TmpFileName.Append(".log"); \
\
/** 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 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) \
{ \
FString AbsoluteDestinationPath = SaveDirectory + "/" + FileName + "-backup-" + FDateTime::Now().ToString() + ".log"; \
PlatformFile.MoveFile(*AbsoluteDestinationPath, *AbsoluteFilePath); \
PlatformFile.DeleteFile(*AbsoluteFilePath); \
} \
{ \
IsNewLog = false; \
FString TextToSave = "["; \
TextToSave.Append(FDateTime::Now().ToString()); \
TextToSave.Append("] "); \
TextToSave.Append(Value); \
TextToSave.Append("\r\n"); \
FFileHelper::SaveStringToFile(TextToSave, *AbsoluteFilePath, EncodingOptions, FileManager, WriteFlags); \
} \
\
}
//
static FORCEINLINE void SG_LOG(FString FileName, FString PathName, 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, UE_ARRAY_COUNT(TempStr), Format, Ptr);
va_end(Ptr);
SG_LOG_S(FileName, PathName, FString(TempStr));
}