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写入到单独文件中的主要内容,如果未能解决你的问题,请参考以下文章

深入理解AD域登录过程(此文章是其他地方的,忘记出处)

JMeter写入文件

如何将火花数据输出到具有单独列的 csv 文件?

使用 xargs 和 awk 处理多个文件并将处理后的数据写入单独的文件

C#写入日志信息到文件中

Python:计算txt文件目录中的单词并将单词计数写入单独的txt文件