aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/logging/tracesink.cpp
blob: 8a6f4e40c2870535b746fde24face1f8ae834a91 (plain) (blame)
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