23#ifndef UE_LOG_INCLUDE_SOURCE_LOCATION
24#define UE_LOG_INCLUDE_SOURCE_LOCATION 1
27#if UE_LOG_INCLUDE_SOURCE_LOCATION || LOGTRACE_ENABLED
28#define UE_PRIVATE_LOG_USE_STATIC_RECORD 1
30#define UE_PRIVATE_LOG_USE_STATIC_RECORD 0
49 template <
typename FmtType,
typename... Types>
55 SendNotificationStringfImpl((
const TCHAR*)
Fmt, Args...);
59 template <
typename FmtType,
typename... Types>
69 template <
typename FmtType,
typename... Types>
75 Logf_InternalImpl(
File,
Line, Category, Verbosity, (
const TCHAR*)
Fmt, Args...);
91#ifndef COMPILED_IN_MINIMUM_VERBOSITY
92 #define COMPILED_IN_MINIMUM_VERBOSITY VeryVerbose
95 #error COMPILED_IN_MINIMUM_VERBOSITY can only be defined in monolithic builds.
99#define UE_LOG_EXPAND_IS_FATAL(Verbosity, ActiveBlock, InactiveBlock) UE_JOIN(UE_LOG_EXPAND_IS_FATAL_, Verbosity)(ActiveBlock, InactiveBlock)
101#define UE_LOG_EXPAND_IS_FATAL_Fatal( ActiveBlock, InactiveBlock) ActiveBlock
102#define UE_LOG_EXPAND_IS_FATAL_Error( ActiveBlock, InactiveBlock) InactiveBlock
103#define UE_LOG_EXPAND_IS_FATAL_Warning( ActiveBlock, InactiveBlock) InactiveBlock
104#define UE_LOG_EXPAND_IS_FATAL_Display( ActiveBlock, InactiveBlock) InactiveBlock
105#define UE_LOG_EXPAND_IS_FATAL_Log( ActiveBlock, InactiveBlock) InactiveBlock
106#define UE_LOG_EXPAND_IS_FATAL_Verbose( ActiveBlock, InactiveBlock) InactiveBlock
107#define UE_LOG_EXPAND_IS_FATAL_VeryVerbose(ActiveBlock, InactiveBlock) InactiveBlock
108#define UE_LOG_EXPAND_IS_FATAL_All( ActiveBlock, InactiveBlock) InactiveBlock
109#define UE_LOG_EXPAND_IS_FATAL_SetColor( ActiveBlock, InactiveBlock) InactiveBlock
112 #define UE_LOG_SOURCE_FILE(File) File
114 #define UE_LOG_SOURCE_FILE(File) "Unknown"
121struct FStaticBasicLogDynamicData
129struct FStaticBasicLogRecord
135 FStaticBasicLogDynamicData& DynamicData;
139 constexpr FStaticBasicLogRecord(
145 #if UE_LOG_INCLUDE_SOURCE_LOCATION
155#if !UE_PRIVATE_LOG_USE_STATIC_RECORD
158 FStaticBasicLogRecord*
operator&()
const =
delete;
164#if UE_PRIVATE_LOG_USE_STATIC_RECORD
165using FStaticBasicLogRecordParam =
const FStaticBasicLogRecord&;
167using FStaticBasicLogRecordParam = FStaticBasicLogRecord;
170template <ELogVerbosity::Type Verbosity>
173CORE_API void BasicFatalLogWithProgramCounter(FStaticBasicLogRecordParam
Log,
const FLogCategoryBase* Category,
void* ProgramCounter, ...);
182 #define UE_LOG(CategoryName, Verbosity, Format, ...) \
184 if constexpr ((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) == ELogVerbosity::Fatal) \
186 LowLevelFatalError(Format, ##__VA_ARGS__); \
190 #define UE_LOG_REF(CategoryRef, Verbosity, Format, ...) \
192 if constexpr ((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) == ELogVerbosity::Fatal) \
194 LowLevelFatalError(Format, ##__VA_ARGS__); \
198 #define UE_LOG_CLINKAGE(CategoryName, Verbosity, Format, ...) \
200 if constexpr ((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) == ELogVerbosity::Fatal) \
202 LowLevelFatalError(Format, ##__VA_ARGS__); \
208 #define UE_CLOG(Condition, CategoryName, Verbosity, Format, ...) \
210 if constexpr ((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) == ELogVerbosity::Fatal) \
214 LowLevelFatalError(Format, ##__VA_ARGS__); \
220 #define UE_LOG_ACTIVE(...) (0)
221 #define UE_LOG_ANY_ACTIVE(...) (0)
222 #define UE_SUPPRESS(...) {}
223 #define UE_GET_LOG_VERBOSITY(...) (ELogVerbosity::NoLogging)
224 #define UE_SET_LOG_VERBOSITY(...)
225 #define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity) extern FNoLoggingCategory CategoryName;
226 #define DEFINE_LOG_CATEGORY(CategoryName, ...) FNoLoggingCategory CategoryName;
227 #define DEFINE_LOG_CATEGORY_STATIC(...)
228 #define DECLARE_LOG_CATEGORY_CLASS(...)
229 #define DEFINE_LOG_CATEGORY_CLASS(...)
235 template <
int32 VerbosityToCheck,
typename CategoryType>
255 #define UE_LOG_ACTIVE(CategoryName, Verbosity) (::UEAsserts_Private::IsLogActive<(int32)ELogVerbosity::Verbosity>(CategoryName))
257 #define UE_GET_LOG_VERBOSITY(CategoryName) \
258 CategoryName.GetVerbosity()
260 #define UE_SET_LOG_VERBOSITY(CategoryName, Verbosity) \
261 CategoryName.SetVerbosity(ELogVerbosity::Verbosity);
270 #define UE_LOG(CategoryName, Verbosity, Format, ...) \
271 UE_PRIVATE_LOG(UE_EMPTY, constexpr, CategoryName, Verbosity, Format, ##__VA_ARGS__)
282 #define UE_LOG_REF(CategoryRef, Verbosity, Format, ...) \
283 UE_PRIVATE_LOG(UE_EMPTY, UE_EMPTY, CategoryRef, Verbosity, Format, ##__VA_ARGS__)
286 #define UE_LOG_CLINKAGE UE_LOG
298 #define UE_CLOG(Condition, CategoryName, Verbosity, Format, ...) \
299 UE_PRIVATE_LOG(if (Condition), constexpr, CategoryName, Verbosity, Format, ##__VA_ARGS__)
302 #define UE_PRIVATE_LOG(Condition, CategoryConst, Category, Verbosity, Format, ...) \
304 static_assert(std::is_const_v<std::remove_reference_t<decltype(Format)>>, "Formatting string must be a const TCHAR array."); \
305 static_assert(TIsArrayOrRefOfTypeByPredicate<decltype(Format), TIsCharEncodingCompatibleWithTCHAR>::Value, "Formatting string must be a TCHAR array."); \
306 UE_VALIDATE_FORMAT_STRING(Format, ##__VA_ARGS__); \
307 UE_IF(LOGTRACE_ENABLED, static ::UE::Logging::Private::FStaticBasicLogDynamicData LOG_Dynamic, ); \
308 UE_IF(UE_PRIVATE_LOG_USE_STATIC_RECORD, static,) constexpr ::UE::Logging::Private::FStaticBasicLogRecord LOG_Static(Format, __builtin_FILE(), __builtin_LINE(), UE_IF(LOGTRACE_ENABLED, &LOG_Dynamic, nullptr)); \
309 static_assert((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) < ::ELogVerbosity::NumVerbosity && ::ELogVerbosity::Verbosity > 0, "Verbosity must be constant and in range."); \
310 if constexpr ((::ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) == ::ELogVerbosity::Fatal) \
314 ::UE::Logging::Private::BasicFatalLog(LOG_Static, &Category, ##__VA_ARGS__); \
318 else if constexpr ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= ::ELogVerbosity::COMPILED_IN_MINIMUM_VERBOSITY) \
320 if CategoryConst ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= Category.GetCompileTimeVerbosity()) \
322 if (!Category.IsSuppressed(::ELogVerbosity::Verbosity)) \
326 ::UE::Logging::Private::BasicLog<::ELogVerbosity::Verbosity>(LOG_Static, &Category, ##__VA_ARGS__); \
341 #define UE_SUPPRESS(CategoryName, Verbosity, ExecuteIfUnsuppressed) \
343 static_assert((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) < ELogVerbosity::NumVerbosity && ELogVerbosity::Verbosity > 0, "Verbosity must be constant and in range."); \
344 CA_CONSTANT_IF((ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) <= ELogVerbosity::COMPILED_IN_MINIMUM_VERBOSITY && (ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask) <= FLogCategory##CategoryName::CompileTimeVerbosity) \
346 if (!CategoryName.IsSuppressed(ELogVerbosity::Verbosity)) \
348 FScopedCategoryAndVerbosityOverride TEMP__##CategoryName(CategoryName.GetCategoryName(), ELogVerbosity::Type(ELogVerbosity::Verbosity & ELogVerbosity::VerbosityMask)); \
349 ExecuteIfUnsuppressed; \
350 CategoryName.PostTrigger(ELogVerbosity::Verbosity); \
361 #define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
362 extern struct FLogCategory##CategoryName : public FLogCategory<ELogVerbosity::DefaultVerbosity, ELogVerbosity::CompileTimeVerbosity> \
364 UE_FORCEINLINE_HINT FLogCategory##CategoryName() : FLogCategory(TEXT(#CategoryName)) {} \
371 #define DEFINE_LOG_CATEGORY(CategoryName) FLogCategory##CategoryName CategoryName;
380 #define DEFINE_LOG_CATEGORY_STATIC(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
381 static struct FLogCategory##CategoryName : public FLogCategory<ELogVerbosity::DefaultVerbosity, ELogVerbosity::CompileTimeVerbosity> \
383 static_assert(ELogVerbosity::DefaultVerbosity <= ELogVerbosity::CompileTimeVerbosity, "Default verbosity of log category cannot be higher than its compile time verbosity"); \
384 UE_FORCEINLINE_HINT FLogCategory##CategoryName() : FLogCategory(TEXT(#CategoryName)) {} \
394 #define DECLARE_LOG_CATEGORY_CLASS(CategoryName, DefaultVerbosity, CompileTimeVerbosity) \
395 DEFINE_LOG_CATEGORY_STATIC(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
401 #define DEFINE_LOG_CATEGORY_CLASS(Class, CategoryName) Class::FLogCategory##CategoryName Class::CategoryName;
406#define NOTIFY_CLIENT_OF_SECURITY_EVENT_IF_NOT_SHIPPING(NetConnection, SecurityPrint) ;
408#define NOTIFY_CLIENT_OF_SECURITY_EVENT_IF_NOT_SHIPPING(NetConnection, SecurityPrint) \
409 FNetControlMessage<NMT_SecurityViolation>::Send(NetConnection, SecurityPrint); \
410 NetConnection->FlushNet(true)
416#if DO_CHECK && !USING_CODE_ANALYSIS
421#define logOrEnsureNanError(_FormatString_, ...) \
422 if (!GEnsureOnNANDiagnostic)\
424 static bool OnceOnly = false;\
427 UEAsserts_Private::InternalLogNANDiagnosticMessage(_FormatString_, ##__VA_ARGS__); \
433 ensureMsgf(!GEnsureOnNANDiagnostic, _FormatString_, ##__VA_ARGS__); \
436#define logOrEnsureNanError(_FormatString_, ...)
constexpr EUpdateTransformFlags operator&(EUpdateTransformFlags Left, EUpdateTransformFlags Right)
Definition ActorComponent.h:111
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_LOG_INCLUDE_SOURCE_LOCATION
Definition LogMacros.h:24
CORE_API int32 GEnsureOnNANDiagnostic
Definition CoreMisc.cpp:503
#define UE_IF(OneOrZero, Token1, Token0)
Definition PreprocessorHelpers.h:18
Definition NameTypes.h:617
Type
Definition LogVerbosity.h:17
@ VerbosityMask
Definition LogVerbosity.h:58
Definition LogMacros.h:234
UE_FORCEINLINE_HINT bool IsLogActive(const CategoryType &Category)
Definition LogMacros.h:236
Definition StructuredLog.cpp:48
Definition LogCategory.h:21
Definition LogMacros.h:44
static CORE_API void LogV(const ANSICHAR *File, int32 Line, const FLogCategoryName &Category, ELogVerbosity::Type Verbosity, const TCHAR *Fmt, va_list Args)
Definition LogMacros.cpp:67
static void Logf(const ANSICHAR *File, int32 Line, const FLogCategoryName &Category, ELogVerbosity::Type Verbosity, const FmtType &Fmt, Types... Args)
Definition LogMacros.h:60
static CORE_API void SendNotificationString(const TCHAR *Message)
Definition LogMacros.cpp:132
static void SendNotificationStringf(const FmtType &Fmt, Types... Args)
Definition LogMacros.h:50
static void Logf_Internal(const ANSICHAR *File, int32 Line, const FLogCategoryName &Category, ELogVerbosity::Type Verbosity, const FmtType &Fmt, Types... Args)
Definition LogMacros.h:70
Definition IsArrayOrRefOfTypeByPredicate.h:13
Definition IsValidVariadicFunctionArg.h:14