Skip to content

yKimisaki/DILoggerPlugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 

Repository files navigation

DILoggerPlugin

UE_LOGっぽい使い心地で、DIで外部からログに対する振る舞いを変更できる、シンプルなログシステム

使い方

まるっと落として、プロジェクトのPluginsフォルダに入れてください。

MyProject.Build.csPublicDependencyModuleNames"DILoggerPlugin"を追加してください。

MyProject.Build.csPublicIncludePaths"DILoggerPlugin/Public"を追加してください。

プロジェクト内にMyProjectLogger.hMyProjectLogger.cppを用意し、

#pragma once

#include "DILogMacros.h"

DECLARE_LOG_CATEGORY_EXTERN(MyProjectLogTemp, Log, All);

#include "MyProjectLogger.h"

DEFINE_LOG_CATEGORY(MyProjectLogTemp);

のような感じでお望みのカテゴリを作成してください。

DILoggerを使用したいファイルで上記で作ったMyProjectLogger.hをinclideすれば準備完了です。

機能

ソースコード側から単純なログを出力。 Verbosityを指定する方式ではなく、Verbosityを含めたマクロを用意しています。 OutputLogのVerbosityによるフィルタリングもUE_LOGと同じです。

DI_LOG(MyProjectLogTemp, TEXT("DI Logger Test LOG %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_WARNING(UE4TestLogSystem, TEXT("DI Logger Test WARNING %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_ERROR(UE4TestLogSystem, TEXT("DI Logger Test ERROR %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_VERBOSE(UE4TestLogSystem, TEXT("DI Logger Test VERBOSE %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_VERYVERBOSE(UE4TestLogSystem, TEXT("DI Logger Test VERYVERBOSE %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_FATAL(UE4TestLogSystem, TEXT("DI Logger Test FATAL %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));

PrintStringのようにコンソール画面への出力は以下です。 色(FColor::のものです)、時間、文字スケールを指定できます。

DI_LOG_DISPLAY(MyProjectLogTemp, White, 5.f, 3.f, TEXT("DI Logger Test LOG %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_DISPLAY_WARNING(MyProjectLogTemp, Yellow, 5.f, 3.f, TEXT("DI Logger Test WARNING %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_DISPLAY_ERROR(MyProjectLogTemp, Red, 5.f, 3.f, TEXT("DI Logger Test ERROR %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_DISPLAY_VERBOSE(MyProjectLogTemp, White, 5.f, 3.f, TEXT("DI Logger Test VERBOSE %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_DISPLAY_VERYVERBOSE(MyProjectLogTemp, White, 5.f, 3.f, TEXT("DI Logger VERYVERBOSE Test %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));

image

アサートウィンドウを出すものも用意しています。

DI_LOG_ASSERT(MyProjectLogTemp, TEXT("DI Logger Test LOG %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_ASSERT_WARNING(UE4TestLogSystem, TEXT("DI Logger Test WARNING %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_ASSERT_ERROR(UE4TestLogSystem, TEXT("DI Logger Test ERROR %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_ASSERT_VERBOSE(UE4TestLogSystem, TEXT("DI Logger Test VERBOSE %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));
DI_LOG_ASSERT_VERYVERBOSE(UE4TestLogSystem, TEXT("DI Logger Test VERYVERBOSE %d %f  %s"), 105, 50.3f, TEXT("FUN for ALL, ALL for FUN."));

image

Blueprintからも同じ使い勝手でログを出力できます

image

OutputLogの出力

後述しますが、Logの挙動はDILogHandlerというクラスにあります。 デフォルトの挙動では、ログメッセージの他、ファイル名、行番号、関数名なども同時に表示されます。

BP側から呼んだ場合

MyProjectLogTemp: DI Logger Test LOG
    -FILE: AbilityTest_C /Game/EmbeddedContent/Levels/AbilityTest/UEDPIE_0_AbilityTest.AbilityTest:PersistentLevel.AbilityTest_C_2:0
    -FUNCTION:  AbilityTest_C.ReceiveBeginPlay

C++側から呼んだ場合

MyProjectLogTemp: DI Logger Test LOG 105 50.299999  FUN for ALL, ALL for FUN.
    -FILE: K:\ue4lib\UE4Test\Source\UE4Test\Levels\CPP_LevelScriptActor.cpp:35
    -FUNCTION: auto __cdecl ACPP_LevelScriptActor::BeginPlay::<lambda_bf3ac1c84b503667bbab9a4389cfbd1c>::operator ()<struct FLogCategoryMyProjectLogTemp,wchar_t[29],int,float,wchar_t[26]>(const struct FLogCategoryMyProjectLogTemp &,const wchar_t (&)[29],const int &,const float &,const wchar_t (&)[26]) const

DIで挙動を変える

上記のすべてのログは、UDILoggerSetLogHandlerで登録されているIDILogHandlerInterfaceに渡されます。 IDILogHandlerInterfaceには、 Log(const FString& Message, const void* Context, const FString& FileName, int32 Line, const FString& CalledFunction, const FLogCategoryBase* Category, ELogVerbosity::Type Verbosity, bool WithAssertion, bool ToScreen, float TimeToDisplay, const FColor& DisplayColor, const FVector2D& DisplayTextScale) という関数が定義されています。 デフォルトではGameInstanceが初期化されるタイミングで、DILogHandlerUDILoggerにセットされます。

プロジェクト独自でログを加工したい場合は、上記のIDILogHandlerInterfaceを実装したLogHandlerを作成し、MyProjectGameInstanceのInit()の内部などで、GetSubsystem<UDILogger>().SetHandler(MyProjectLogHandler);のように指定してください。

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published