UE5--Log写入到单独文件中

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));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值