1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// Copyright Epic Games, Inc. All Rights Reserved.
#include <zencore/logbase.h>
#include <zencore/logging/tracesink.h>
#include <zencore/string.h>
#include <zencore/timer.h>
#include <zencore/trace.h>
#if ZEN_WITH_TRACE
namespace zen::logging {
UE_TRACE_CHANNEL_DEFINE(LogChannel)
UE_TRACE_EVENT_BEGIN(Logging, LogCategory, NoSync | Important)
UE_TRACE_EVENT_FIELD(const void*, CategoryPointer)
UE_TRACE_EVENT_FIELD(uint8_t, DefaultVerbosity)
UE_TRACE_EVENT_FIELD(UE::Trace::AnsiString, Name)
UE_TRACE_EVENT_END()
UE_TRACE_EVENT_BEGIN(Logging, LogMessageSpec, NoSync | Important)
UE_TRACE_EVENT_FIELD(const void*, LogPoint)
UE_TRACE_EVENT_FIELD(const void*, CategoryPointer)
UE_TRACE_EVENT_FIELD(int32_t, Line)
UE_TRACE_EVENT_FIELD(uint8_t, Verbosity)
UE_TRACE_EVENT_FIELD(UE::Trace::AnsiString, FileName)
UE_TRACE_EVENT_FIELD(UE::Trace::AnsiString, FormatString)
UE_TRACE_EVENT_END()
UE_TRACE_EVENT_BEGIN(Logging, LogMessage, NoSync)
UE_TRACE_EVENT_FIELD(const void*, LogPoint)
UE_TRACE_EVENT_FIELD(uint64_t, Cycle)
UE_TRACE_EVENT_FIELD(uint8_t[], FormatArgs)
UE_TRACE_EVENT_END()
void
TraceLogCategory(const logging::Logger* Category, const char* Name, logging::LogLevel DefaultVerbosity)
{
uint16_t NameLen = uint16_t(strlen(Name));
UE_TRACE_LOG(Logging, LogCategory, LogChannel, NameLen * sizeof(ANSICHAR))
<< LogCategory.CategoryPointer(Category) << LogCategory.DefaultVerbosity(uint8_t(DefaultVerbosity))
<< LogCategory.Name(Name, NameLen);
}
void
TraceLogMessageSpec(const void* LogPoint,
const logging::Logger* Category,
logging::LogLevel Verbosity,
const std::string_view File,
int32_t Line,
const std::string_view Format)
{
uint16_t FileNameLen = uint16_t(File.size());
uint16_t FormatStringLen = uint16_t(Format.size());
uint32_t DataSize = (FileNameLen * sizeof(ANSICHAR)) + (FormatStringLen * sizeof(ANSICHAR));
UE_TRACE_LOG(Logging, LogMessageSpec, LogChannel, DataSize)
<< LogMessageSpec.LogPoint(LogPoint) << LogMessageSpec.CategoryPointer(Category) << LogMessageSpec.Line(Line)
<< LogMessageSpec.Verbosity(uint8_t(Verbosity)) << LogMessageSpec.FileName(File.data(), FileNameLen)
<< LogMessageSpec.FormatString(Format.data(), FormatStringLen);
}
void
TraceLogMessageInternal(const void* LogPoint, int32_t EncodedFormatArgsSize, const uint8_t* EncodedFormatArgs)
{
UE_TRACE_LOG(Logging, LogMessage, LogChannel) << LogMessage.LogPoint(LogPoint) << LogMessage.Cycle(GetHifreqTimerValue())
<< LogMessage.FormatArgs(EncodedFormatArgs, EncodedFormatArgsSize);
}
//////////////////////////////////////////////////////////////////////////
void
TraceSink::Log(const LogMessage& Msg)
{
ZEN_UNUSED(Msg);
}
void
TraceSink::Flush()
{
}
void
TraceSink::SetFormatter(std::unique_ptr<Formatter> /*InFormatter*/)
{
// This sink doesn't use a formatter since it just forwards the raw format
// args to the trace system
}
} // namespace zen::logging
#endif
|