最近有个需求,其中有个功能点是要实现对UE引擎日志进行监听。于是便去研究了一下,顺便分享一下实现方法。
首先我们建立一个类FMyLogListener
引入头文件CoreMinimal.h,类继承FOutputDevice,定义并实现基类的纯虚函数Serialize。
Serialize函数用于处理来自UE的日志,参数V是日志内容,Verbosity给日志进行了分级,常见的有Display、Warning和Error等,而Category是日志的分类(LogTemp、LogXXXX)
为了让UE能够发送日志到我们刚定义的类,我们需要调用GLog的接口AddOutputDevice把类注册到UE的日志系统。
GLog->AddOutputDevice(this);
然后,我们还需要在类销毁前调用RemoveOutputDevice把自身移除
GLog->RemoveOutputDevice(this);
最后,我们需要在合适的位置创建FMyLogListener实例。
完整代码
// .h
#pragma once
#include "CoreMinimal.h"
class FMyLogListener : public FOutputDevice
{
public:
FMyLogListener();
~FMyLogListener();
virtual void Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category) override;
};
// .cpp
#include "FMyLogListener.h"
FMyLogListener::FMyLogListener()
{
check(GLog)
GLog->AddOutputDevice(this);
}
FMyLogListener::~FMyLogListener()
{
if (GLog)
{
GLog->RemoveOutputDevice(this);
}
}
void FMyLogListener::Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const FName& Category)
{
// 根据个人需求,对日志进行一些处理。。。
}