UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StructuredLog.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "Logging/LogMacros.h"
10#include "Misc/OptionalFwd.h"
14#include "Templates/Models.h"
15#include "Templates/Requires.h"
17
18#include <atomic>
19#include <type_traits>
20
21class FTextFormat;
22template <typename FuncType> class TFunctionRef;
23
24#define UE_API CORE_API
25
46#define UE_LOGFMT(CategoryName, Verbosity, Format, ...) UE_PRIVATE_LOGFMT_CALL(UE_LOGFMT_EX, (CategoryName, Verbosity, Format UE_PRIVATE_LOGFMT_FIELDS(__VA_ARGS__)))
47
49#define UE_CLOGFMT(Condition, CategoryName, Verbosity, Format, ...) UE_PRIVATE_LOGFMT_CALL(UE_CLOGFMT_EX, (Condition, CategoryName, Verbosity, Format UE_PRIVATE_LOGFMT_FIELDS(__VA_ARGS__)))
50
64#define UE_LOGFMT_EX(CategoryName, Verbosity, Format, ...) UE_PRIVATE_LOGFMT(UE_EMPTY, CategoryName, Verbosity, Format, ##__VA_ARGS__)
65
67#define UE_CLOGFMT_EX(Condition, CategoryName, Verbosity, Format, ...) UE_PRIVATE_LOGFMT(if (Condition), CategoryName, Verbosity, Format, ##__VA_ARGS__)
68
87#define UE_LOGFMT_LOC(CategoryName, Verbosity, Key, Format, ...) \
88 UE_LOGFMT_NSLOC(CategoryName, Verbosity, LOCTEXT_NAMESPACE, Key, Format, ##__VA_ARGS__)
89#define UE_LOGFMT_NSLOC(CategoryName, Verbosity, Namespace, Key, Format, ...) \
90 UE_PRIVATE_LOGFMT_CALL(UE_LOGFMT_NSLOC_EX, (CategoryName, Verbosity, Namespace, Key, Format UE_PRIVATE_LOGFMT_FIELDS(__VA_ARGS__)))
91
93#define UE_CLOGFMT_LOC(Condition, CategoryName, Verbosity, Key, Format, ...) \
94 UE_CLOGFMT_NSLOC(Condition, CategoryName, Verbosity, LOCTEXT_NAMESPACE, Key, Format, ##__VA_ARGS__)
95#define UE_CLOGFMT_NSLOC(Condition, CategoryName, Verbosity, Namespace, Key, Format, ...) \
96 UE_PRIVATE_LOGFMT_CALL(UE_CLOGFMT_NSLOC_EX, (Condition, CategoryName, Verbosity, Namespace, Key, Format UE_PRIVATE_LOGFMT_FIELDS(__VA_ARGS__)))
97
108#define UE_LOGFMT_LOC_EX(CategoryName, Verbosity, Key, Format, ...) \
109 UE_LOGFMT_NSLOC_EX(CategoryName, Verbosity, LOCTEXT_NAMESPACE, Key, Format, ##__VA_ARGS__)
110#define UE_LOGFMT_NSLOC_EX(CategoryName, Verbosity, Namespace, Key, Format, ...) \
111 UE_PRIVATE_LOGFMT_LOC(UE_EMPTY, CategoryName, Verbosity, Namespace, Key, Format, ##__VA_ARGS__)
112
114#define UE_CLOGFMT_LOC_EX(Condition, CategoryName, Verbosity, Key, Format, ...) \
115 UE_CLOGFMT_NSLOC_EX(Condition, CategoryName, Verbosity, LOCTEXT_NAMESPACE, Key, Format, ##__VA_ARGS__)
116#define UE_CLOGFMT_NSLOC_EX(Condition, CategoryName, Verbosity, Namespace, Key, Format, ...) \
117 UE_PRIVATE_LOGFMT_LOC(if (Condition), CategoryName, Verbosity, Namespace, Key, Format, ##__VA_ARGS__)
118
120#define UE_LOGFMT_FIELD(Name, Value) UE_PRIVATE_LOGFMT_FIELD((Name, Value))
121
123#define UE_LOGFMT_VALUE(Value) Value
124
125#if !NO_LOGGING
126
143#define UE_LOG_CONTEXT(Name, ...) ::UE::Logging::Private::FLogContext ANONYMOUS_VARIABLE(LogContext_)(Name, ##__VA_ARGS__)
144
145#else // #if !NO_LOGGING
146
147#define UE_LOG_CONTEXT(...)
148
149#endif
150
151struct FDateTime;
152
153namespace UE
154{
155
157class FLogTemplate;
158
163{
164public:
165 UE_API static FLogTime Now();
166 UE_API static FLogTime FromUtcTime(const FDateTime& UtcTime);
167
168 constexpr FLogTime() = default;
169
172
173private:
175 int64 UtcTicks = 0;
176};
177
182{
183public:
185 const FName& GetCategory() const { return Category; }
186 void SetCategory(const FName& InCategory) { Category = InCategory; }
187
189 ELogVerbosity::Type GetVerbosity() const { return Verbosity; }
191
193 const FLogTime& GetTime() const { return Time; }
194 void SetTime(const FLogTime& InTime) { Time = InTime; }
195
197 const TCHAR* GetFormat() const { return Format; }
198 void SetFormat(const TCHAR* InFormat) { Format = InFormat; }
199
201 const FLogTemplate* GetTemplate() const { return Template; }
202 void SetTemplate(const FLogTemplate* InTemplate) { Template = InTemplate; }
203
205 const FCbObject& GetFields() const { return Fields; }
207
209 const ANSICHAR* GetFile() const { return File; }
210 void SetFile(const ANSICHAR* InFile) { File = InFile; }
211
213 int32 GetLine() const { return Line; }
214 void SetLine(int32 InLine) { Line = InLine; }
215
217 const TCHAR* GetTextNamespace() const { return TextNamespace; }
218 void SetTextNamespace(const TCHAR* InTextNamespace) { TextNamespace = InTextNamespace; }
219
221 const TCHAR* GetTextKey() const { return TextKey; }
222 void SetTextKey(const TCHAR* InTextKey) { TextKey = InTextKey; }
223
227
242
243private:
244 const TCHAR* Format = nullptr;
245 const ANSICHAR* File = nullptr;
246 int32 Line = 0;
247 FName Category;
249 FLogTime Time;
250 FCbObject Fields;
251 const FLogTemplate* Template = nullptr;
252 const TCHAR* TextNamespace = nullptr;
253 const TCHAR* TextKey = nullptr;
254};
255
265UE_API void DispatchDynamicLogRecord(const FLogRecord& Record);
266
273UE_API void VisitLogContext(TFunctionRef<void (const FCbField&)> Visitor);
274
289template <typename ValueType UE_REQUIRES(TModels_V<CInsertable<FCbWriter&>, ValueType>)>
290inline void SerializeForLog(FCbWriter& Writer, ValueType&& Value)
291{
292 Writer << (ValueType&&)Value;
293}
294
297{
298 template <typename ValueType>
299 auto Requires(FCbWriter& Writer, ValueType&& Value) -> decltype(
300 SerializeForLog(Writer, (ValueType&&)Value)
301 );
302};
303
305template <typename ValueType UE_REQUIRES(TModels_V<CSerializableForLog, ValueType>)>
306inline void CallSerializeForLog(FCbWriter& Writer, ValueType&& Value)
307{
308 SerializeForLog(Writer, (ValueType&&)Value);
309}
310
311} // UE
312
313template <typename ValueType UE_REQUIRES(TModels_V<UE::CSerializableForLog, ValueType>)>
315{
316 Writer.BeginArray();
317 if (Optional)
318 {
319 UE::CallSerializeForLog(Writer, Optional.GetValue());
320 }
321 Writer.EndArray();
322}
323
324namespace UE::Logging::Private
325{
326
329{
330 std::atomic<FLogTemplate*> Template = nullptr;
331#if LOGTRACE_ENABLED
332 std::atomic<bool> bInitializedTrace = false;
333#endif
334};
335
338{
339 const TCHAR* Format = nullptr;
340 UE_IF(UE_LOG_INCLUDE_SOURCE_LOCATION,, inline static constexpr) const ANSICHAR* File = nullptr;
344
345 // Workaround for https://developercommunity.visualstudio.com/t/Incorrect-warning-C4700-with-unrelated-s/10285950
347 const TCHAR* InFormat,
348 const ANSICHAR* InFile,
353 #if UE_LOG_INCLUDE_SOURCE_LOCATION
354 , File(InFile)
355 , Line(InLine)
356 #endif
359 {
360 }
361};
362
365{
366 const TCHAR* TextNamespace = nullptr;
367 const TCHAR* TextKey = nullptr;
368 const TCHAR* Format = nullptr;
369 UE_IF(UE_LOG_INCLUDE_SOURCE_LOCATION,, inline static constexpr) const ANSICHAR* File = nullptr;
373
374 // Workaround for https://developercommunity.visualstudio.com/t/Incorrect-warning-C4700-with-unrelated-s/10285950
376 const TCHAR* InTextNamespace,
377 const TCHAR* InTextKey,
378 const TCHAR* InFormat,
379 const ANSICHAR* InFile,
386 #if UE_LOG_INCLUDE_SOURCE_LOCATION
387 , File(InFile)
388 , Line(InLine)
389 #endif
392 {
393 }
394};
395
397{
398 using FWriteFn = void (FCbWriter& Writer, const void* Value);
399
401 const void* Value;
403
404 template <typename ValueType>
405 static void Write(FCbWriter& Writer, const void* Value)
406 {
407 SerializeForLog(Writer, *(const ValueType*)Value);
408 }
409};
410
411#if !NO_LOGGING
412UE_API void LogWithNoFields(const FLogCategoryBase& Category, const FStaticLogRecord& Log);
413UE_API void LogWithFieldArray(const FLogCategoryBase& Category, const FStaticLogRecord& Log, const FLogField* Fields, int32 FieldCount);
414UE_API void LogWithNoFields(const FLogCategoryBase& Category, const FStaticLocalizedLogRecord& Log);
415UE_API void LogWithFieldArray(const FLogCategoryBase& Category, const FStaticLocalizedLogRecord& Log, const FLogField* Fields, int32 FieldCount);
416#endif
417
418[[noreturn]] UE_API void FatalLogWithNoFields(const FLogCategoryBase& Category, const FStaticLogRecord& Log);
419[[noreturn]] UE_API void FatalLogWithFieldArray(const FLogCategoryBase& Category, const FStaticLogRecord& Log, const FLogField* Fields, int32 FieldCount);
420[[noreturn]] UE_API void FatalLogWithNoFields(const FLogCategoryBase& Category, const FStaticLocalizedLogRecord& Log);
421[[noreturn]] UE_API void FatalLogWithFieldArray(const FLogCategoryBase& Category, const FStaticLocalizedLogRecord& Log, const FLogField* Fields, int32 FieldCount);
422
424template <typename NameType>
426{
428};
429
431template <typename NameType>
433{
434 static_assert(TIsArrayOrRefOfType<NameType, ANSICHAR>::Value, "Name must be an ANSICHAR string literal.");
435 return {(NameType&&)Name};
436}
437
440{
441 template <typename T> inline constexpr static int32 ValueCount = 1;
442 template <typename T> inline constexpr static int32 ValueCount<TLogFieldName<T>> = 0;
443
444 template <typename... FieldArgTypes>
445 inline constexpr static int32 GetCount()
446 {
447 return (ValueCount<FieldArgTypes> + ...);
448 }
449
450 inline static void Create(FLogField* Fields)
451 {
452 }
453
454 template <typename ValueType, typename... FieldArgTypes, std::enable_if_t<ValueCount<ValueType>>* = nullptr>
455 inline static void Create(FLogField* Fields, const ValueType& Value, FieldArgTypes&&... FieldArgs)
456 {
457 new(Fields) FLogField{nullptr, &Value, FLogField::Write<ValueType>};
458 Create(Fields + 1, (FieldArgTypes&&)FieldArgs...);
459 }
460
461 template <typename NameType, typename ValueType, typename... FieldArgTypes>
462 inline static void Create(FLogField* Fields, TLogFieldName<NameType> Name, const ValueType& Value, FieldArgTypes&&... FieldArgs)
463 {
464 new(Fields) FLogField{Name.Name, &Value, FLogField::Write<ValueType>};
465 Create(Fields + 1, (FieldArgTypes&&)FieldArgs...);
466 }
467};
468
470template <typename LogType, typename... FieldArgTypes>
472{
473 if constexpr (sizeof...(FieldArgTypes) == 0)
474 {
475 LogWithNoFields(Category, Log);
476 }
477 else
478 {
479 constexpr int32 FieldCount = FLogFieldCreator::template GetCount<FieldArgTypes...>();
480 static_assert(FieldCount > 0);
481 FLogField Fields[FieldCount];
483 LogWithFieldArray(Category, Log, Fields, FieldCount);
484 }
485}
486
488template <typename LogType, typename... FieldArgTypes>
490{
491 if constexpr (sizeof...(FieldArgTypes) == 0)
492 {
493 FatalLogWithNoFields(Category, Log);
494 }
495 else
496 {
497 constexpr int32 FieldCount = FLogFieldCreator::template GetCount<FieldArgTypes...>();
498 static_assert(FieldCount > 0);
499 FLogField Fields[FieldCount];
501 FatalLogWithFieldArray(Category, Log, Fields, FieldCount);
502 }
503}
504
505#if NO_LOGGING
507#endif
508
510{
511 inline explicit FLogContext(const ANSICHAR* Name)
512 : FLogContext({Name, nullptr, nullptr})
513 {
514 }
515
516 template <typename ValueType>
517 inline explicit FLogContext(const ANSICHAR* Name, const ValueType& Value)
518 : FLogContext({Name, &Value, FLogField::Write<ValueType>})
519 {
520 }
521
522 UE_API explicit FLogContext(const FLogField& Field);
524
525 FLogContext(const FLogContext&) = delete;
527
529 FLogContext* Next = nullptr;
530 FLogContext* Prev = nullptr;
533};
534
535} // UE::Logging::Private
536
537#if !NO_LOGGING
538#define UE_PRIVATE_LOG_CATEGORY(CategoryName) CategoryName
539#else
540#define UE_PRIVATE_LOG_CATEGORY(CategoryName) ::UE::Logging::Private::LogFatal
541#endif
542
543#define UE_PRIVATE_LOGFMT(Condition, CategoryName, Verbosity, Format, ...) \
544 do \
545 { \
546 if constexpr ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) == ::ELogVerbosity::Fatal || \
547 ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= ::ELogVerbosity::COMPILED_IN_MINIMUM_VERBOSITY && \
548 (::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= UE_PRIVATE_LOG_CATEGORY(CategoryName).CompileTimeVerbosity)) \
549 { \
550 static ::UE::Logging::Private::FStaticLogDynamicData LOG_Dynamic; \
551 static constexpr ::UE::Logging::Private::FStaticLogRecord LOG_Static UE_PRIVATE_LOGFMT_AGGREGATE(TEXT(Format), __builtin_FILE(), __builtin_LINE(), ::ELogVerbosity::Verbosity, LOG_Dynamic); \
552 UE_PRIVATE_LOGFMT_LOG_IF_ACTIVE(Condition, CategoryName, Verbosity, LOG_Static, ##__VA_ARGS__); \
553 } \
554 } \
555 while (false)
556
557#define UE_PRIVATE_LOGFMT_LOC(Condition, CategoryName, Verbosity, Namespace, Key, Format, ...) \
558 do \
559 { \
560 if constexpr ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) == ::ELogVerbosity::Fatal || \
561 ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= ::ELogVerbosity::COMPILED_IN_MINIMUM_VERBOSITY && \
562 (::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) <= UE_PRIVATE_LOG_CATEGORY(CategoryName).CompileTimeVerbosity)) \
563 { \
564 static ::UE::Logging::Private::FStaticLogDynamicData LOG_Dynamic; \
565 static constexpr ::UE::Logging::Private::FStaticLocalizedLogRecord LOG_Static UE_PRIVATE_LOGFMT_AGGREGATE(TEXT(Namespace), TEXT(Key), TEXT(Format), __builtin_FILE(), __builtin_LINE(), ::ELogVerbosity::Verbosity, LOG_Dynamic); \
566 UE_PRIVATE_LOGFMT_LOG_IF_ACTIVE(Condition, CategoryName, Verbosity, LOG_Static, ##__VA_ARGS__); \
567 } \
568 } \
569 while (false)
570
571#define UE_PRIVATE_LOGFMT_LOG_IF_ACTIVE(Condition, CategoryName, Verbosity, Log, ...) \
572 if constexpr ((::ELogVerbosity::Verbosity & ::ELogVerbosity::VerbosityMask) == ::ELogVerbosity::Fatal) \
573 { \
574 Condition \
575 { \
576 ::UE::Logging::Private::FatalLogWithFields(UE_PRIVATE_LOG_CATEGORY(CategoryName), LOG_Static, ##__VA_ARGS__); \
577 } \
578 } \
579 else if (!UE_PRIVATE_LOG_CATEGORY(CategoryName).IsSuppressed(::ELogVerbosity::Verbosity)) \
580 { \
581 Condition \
582 { \
583 ::UE::Logging::Private::LogWithFields(UE_PRIVATE_LOG_CATEGORY(CategoryName), LOG_Static, ##__VA_ARGS__); \
584 } \
585 }
586
587// This macro avoids having non-parenthesized commas in the log macros.
588// Such commas can cause issues when a log macro is wrapped by another macro.
589#define UE_PRIVATE_LOGFMT_AGGREGATE(...) {__VA_ARGS__}
590
591// This macro expands a field from either `(Name, Value)` or `Value`
592// A `(Name, Value)` field is converted to `CheckFieldName(Name), Value`
593// A `Value` field is passed through as `Value`
594#define UE_PRIVATE_LOGFMT_FIELD(Field) UE_PRIVATE_LOGFMT_FIELD_EXPAND(UE_PRIVATE_LOGFMT_NAMED_FIELD Field)
595// This macro is only called when the field was parenthesized.
596#define UE_PRIVATE_LOGFMT_NAMED_FIELD(Name, ...) UE_PRIVATE_LOGFMT_NAMED_FIELD ::UE::Logging::Private::CheckFieldName(Name), __VA_ARGS__
597// The next three macros remove UE_PRIVATE_LOGFMT_NAMED_FIELD from the expanded expression.
598#define UE_PRIVATE_LOGFMT_FIELD_EXPAND(...) UE_PRIVATE_LOGFMT_FIELD_EXPAND_INNER(__VA_ARGS__)
599#define UE_PRIVATE_LOGFMT_FIELD_EXPAND_INNER(...) UE_PRIVATE_LOGFMT_STRIP_ ## __VA_ARGS__
600#define UE_PRIVATE_LOGFMT_STRIP_UE_PRIVATE_LOGFMT_NAMED_FIELD
601
602// This macro expands `Arg1, Arg2` to `UE_PRIVATE_LOGFMT_FIELD(Arg1), UE_PRIVATE_LOGFMT_FIELD(Arg2), ...`
603// This macro expands `("Name1", Arg1), ("Name2", Arg2)` to `UE_PRIVATE_LOGFMT_FIELD(("Name1", Arg1)), UE_PRIVATE_LOGFMT_FIELD(("Name2", Arg2)), ...
604#define UE_PRIVATE_LOGFMT_FIELDS(...) UE_PRIVATE_LOGFMT_CALL(UE_JOIN(UE_PRIVATE_LOGFMT_FIELDS_, UE_PRIVATE_LOGFMT_COUNT(__VA_ARGS__)), (__VA_ARGS__))
605
606#define UE_PRIVATE_LOGFMT_FIELDS_0()
607#define UE_PRIVATE_LOGFMT_FIELDS_1(A) , UE_PRIVATE_LOGFMT_FIELD(A)
608#define UE_PRIVATE_LOGFMT_FIELDS_2(A,B) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B)
609#define UE_PRIVATE_LOGFMT_FIELDS_3(A,B,C) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C)
610#define UE_PRIVATE_LOGFMT_FIELDS_4(A,B,C,D) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D)
611#define UE_PRIVATE_LOGFMT_FIELDS_5(A,B,C,D,E) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E)
612#define UE_PRIVATE_LOGFMT_FIELDS_6(A,B,C,D,E,F) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F)
613#define UE_PRIVATE_LOGFMT_FIELDS_7(A,B,C,D,E,F,G) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G)
614#define UE_PRIVATE_LOGFMT_FIELDS_8(A,B,C,D,E,F,G,H) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H)
615#define UE_PRIVATE_LOGFMT_FIELDS_9(A,B,C,D,E,F,G,H,I) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I)
616
617#define UE_PRIVATE_LOGFMT_FIELDS_10(A,B,C,D,E,F,G,H,I,J) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J)
618#define UE_PRIVATE_LOGFMT_FIELDS_11(A,B,C,D,E,F,G,H,I,J,K) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K)
619#define UE_PRIVATE_LOGFMT_FIELDS_12(A,B,C,D,E,F,G,H,I,J,K,L) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K), UE_PRIVATE_LOGFMT_FIELD(L)
620#define UE_PRIVATE_LOGFMT_FIELDS_13(A,B,C,D,E,F,G,H,I,J,K,L,M) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K), UE_PRIVATE_LOGFMT_FIELD(L), UE_PRIVATE_LOGFMT_FIELD(M)
621#define UE_PRIVATE_LOGFMT_FIELDS_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K), UE_PRIVATE_LOGFMT_FIELD(L), UE_PRIVATE_LOGFMT_FIELD(M), UE_PRIVATE_LOGFMT_FIELD(N)
622#define UE_PRIVATE_LOGFMT_FIELDS_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K), UE_PRIVATE_LOGFMT_FIELD(L), UE_PRIVATE_LOGFMT_FIELD(M), UE_PRIVATE_LOGFMT_FIELD(N), UE_PRIVATE_LOGFMT_FIELD(O)
623#define UE_PRIVATE_LOGFMT_FIELDS_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P) , UE_PRIVATE_LOGFMT_FIELD(A), UE_PRIVATE_LOGFMT_FIELD(B), UE_PRIVATE_LOGFMT_FIELD(C), UE_PRIVATE_LOGFMT_FIELD(D), UE_PRIVATE_LOGFMT_FIELD(E), UE_PRIVATE_LOGFMT_FIELD(F), UE_PRIVATE_LOGFMT_FIELD(G), UE_PRIVATE_LOGFMT_FIELD(H), UE_PRIVATE_LOGFMT_FIELD(I), UE_PRIVATE_LOGFMT_FIELD(J), UE_PRIVATE_LOGFMT_FIELD(K), UE_PRIVATE_LOGFMT_FIELD(L), UE_PRIVATE_LOGFMT_FIELD(M), UE_PRIVATE_LOGFMT_FIELD(N), UE_PRIVATE_LOGFMT_FIELD(O), UE_PRIVATE_LOGFMT_FIELD(P)
624
625#define UE_PRIVATE_LOGFMT_COUNT(...) UE_PRIVATE_LOGFMT_CALL(UE_PRIVATE_LOGFMT_COUNT_IMPL, (_, ##__VA_ARGS__, 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0))
626#define UE_PRIVATE_LOGFMT_COUNT_IMPL(_, A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P, Count, ...) Count
627
628#define UE_PRIVATE_LOGFMT_CALL(F, A) UE_PRIVATE_LOGFMT_EXPAND(F A)
629#define UE_PRIVATE_LOGFMT_EXPAND(X) X
630
631#undef UE_API
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEBUG_SECTION
Definition AssertionMacros.h:32
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_COLD
Definition Platform.h:976
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
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
#define UE_IF(OneOrZero, Token1, Token0)
Definition PreprocessorHelpers.h:18
#define UE_API
Definition SColorGradingComponentViewer.h:12
void SerializeForLog(FCbWriter &Writer, const TOptional< ValueType > &Optional)
Definition StructuredLog.h:314
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition CompactBinary.h:1252
Definition CompactBinary.h:1392
Definition CompactBinaryWriter.h:68
void BeginArray(FUtf8StringView Name)
Definition CompactBinaryWriter.h:144
CORE_API void EndArray()
Definition CompactBinaryWriter.cpp:314
Definition NameTypes.h:617
Definition Text.h:278
Definition AssetRegistryState.h:50
Definition StringBuilder.h:79
Definition StructuredLog.h:182
void SetCategory(const FName &InCategory)
Definition StructuredLog.h:186
UE_API void ConvertToCommonLog(FUtf8StringBuilderBase &OutFormat, FCbWriter &OutFields) const
Definition StructuredLog.cpp:1058
UE_API void FormatMessageTo(FUtf8StringBuilderBase &Out) const
Definition StructuredLog.cpp:1048
int32 GetLine() const
Definition StructuredLog.h:213
const TCHAR * GetTextNamespace() const
Definition StructuredLog.h:217
const FLogTime & GetTime() const
Definition StructuredLog.h:193
void SetFile(const ANSICHAR *InFile)
Definition StructuredLog.h:210
const TCHAR * GetFormat() const
Definition StructuredLog.h:197
void SetTemplate(const FLogTemplate *InTemplate)
Definition StructuredLog.h:202
void SetFormat(const TCHAR *InFormat)
Definition StructuredLog.h:198
void SetTextNamespace(const TCHAR *InTextNamespace)
Definition StructuredLog.h:218
void SetTime(const FLogTime &InTime)
Definition StructuredLog.h:194
ELogVerbosity::Type GetVerbosity() const
Definition StructuredLog.h:189
const FCbObject & GetFields() const
Definition StructuredLog.h:205
void SetVerbosity(ELogVerbosity::Type InVerbosity)
Definition StructuredLog.h:190
const ANSICHAR * GetFile() const
Definition StructuredLog.h:209
const TCHAR * GetTextKey() const
Definition StructuredLog.h:221
void SetTextKey(const TCHAR *InTextKey)
Definition StructuredLog.h:222
const FName & GetCategory() const
Definition StructuredLog.h:185
const FLogTemplate * GetTemplate() const
Definition StructuredLog.h:201
void SetFields(FCbObject &&InFields)
Definition StructuredLog.h:206
void SetLine(int32 InLine)
Definition StructuredLog.h:214
Definition StructuredLog.h:163
constexpr FLogTime()=default
static UE_API FLogTime Now()
Definition StructuredLog.cpp:974
UE_API FDateTime GetUtcTime() const
Definition StructuredLog.cpp:988
static UE_API FLogTime FromUtcTime(const FDateTime &UtcTime)
Definition StructuredLog.cpp:981
Definition GenericPlatformFile.h:25
Type
Definition LogVerbosity.h:17
@ Log
Definition LogVerbosity.h:40
Definition FieldSystemNoiseAlgo.cpp:6
Definition StructuredLog.cpp:48
UE_COLD UE_DEBUG_SECTION void LogWithFields(const FLogCategoryBase &Category, const LogType &Log, FieldArgTypes &&... FieldArgs)
Definition StructuredLog.h:471
constexpr TLogFieldName< NameType > CheckFieldName(NameType &&Name)
Definition StructuredLog.h:432
UE_COLD UE_DEBUG_SECTION void FatalLogWithFields(const FLogCategoryBase &Category, const LogType &Log, FieldArgTypes &&... FieldArgs)
Definition StructuredLog.h:489
Definition AdvancedWidgetsModule.cpp:13
void SerializeForLog(FCbWriter &Writer, ValueType &&Value)
Definition StructuredLog.h:290
void CallSerializeForLog(FCbWriter &Writer, ValueType &&Value)
Definition StructuredLog.h:306
Definition DateTime.h:76
Definition LogCategory.h:21
Definition LogCategory.h:86
Definition IsArrayOrRefOfType.h:13
Definition Optional.h:131
Definition StructuredLog.h:297
auto Requires(FCbWriter &Writer, ValueType &&Value) -> decltype(SerializeForLog(Writer,(ValueType &&) Value))
Definition StructuredLog.h:510
FLogContext & operator=(const FLogContext &)=delete
UE_API ~FLogContext()
Definition StructuredLog.cpp:1144
FLogContext(const ANSICHAR *Name)
Definition StructuredLog.h:511
FLogContext * Prev
Definition StructuredLog.h:530
FLogContext(const FLogContext &)=delete
bool bDisabledOlderContext
Definition StructuredLog.h:532
FLogContext * Next
Definition StructuredLog.h:529
FCbField Field
Definition StructuredLog.h:528
FLogContext(const ANSICHAR *Name, const ValueType &Value)
Definition StructuredLog.h:517
bool bDisabledByNewerContext
Definition StructuredLog.h:531
Definition StructuredLog.h:440
static void Create(FLogField *Fields)
Definition StructuredLog.h:450
static constexpr int32 GetCount()
Definition StructuredLog.h:445
static void Create(FLogField *Fields, const ValueType &Value, FieldArgTypes &&... FieldArgs)
Definition StructuredLog.h:455
static constexpr int32 ValueCount
Definition StructuredLog.h:441
static void Create(FLogField *Fields, TLogFieldName< NameType > Name, const ValueType &Value, FieldArgTypes &&... FieldArgs)
Definition StructuredLog.h:462
Definition StructuredLog.h:397
FWriteFn * WriteValue
Definition StructuredLog.h:402
void(FCbWriter &Writer, const void *Value) FWriteFn
Definition StructuredLog.h:398
static void Write(FCbWriter &Writer, const void *Value)
Definition StructuredLog.h:405
const void * Value
Definition StructuredLog.h:401
const ANSICHAR * Name
Definition StructuredLog.h:400
FStaticLogDynamicData & DynamicData
Definition StructuredLog.h:372
const TCHAR * Format
Definition StructuredLog.h:368
const TCHAR * TextNamespace
Definition StructuredLog.h:366
UE_IF(UE_LOG_INCLUDE_SOURCE_LOCATION,, inline static constexpr) const ANSICHAR *File
ELogVerbosity::Type Verbosity
Definition StructuredLog.h:371
const TCHAR * TextKey
Definition StructuredLog.h:367
Definition StructuredLog.h:329
std::atomic< FLogTemplate * > Template
Definition StructuredLog.h:330
Definition StructuredLog.h:338
const TCHAR * Format
Definition StructuredLog.h:339
UE_IF(UE_LOG_INCLUDE_SOURCE_LOCATION,, inline static constexpr) const ANSICHAR *File
ELogVerbosity::Type Verbosity
Definition StructuredLog.h:342
FStaticLogDynamicData & DynamicData
Definition StructuredLog.h:343
Definition StructuredLog.h:426
NameType Name
Definition StructuredLog.h:427