1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
5 #include <CrySchematyc2/Env/IEnvRegistry.h>
6 #include <CrySchematyc2/Services/ILog.h>
7 #include <CrySchematyc2/TemplateUtils/TemplateUtils_ScopedConnection.h>
13 DECLARE_SHARED_POINTERS(ILogOutput
)
15 class CLog
: public ILog
24 virtual ELogMessageType
GetMessageType(const char* szMessageType
) override
;
25 virtual const char* GetMessageTypeName(ELogMessageType messageType
) override
;
26 virtual LogStreamId
CreateStream(const char* szName
, const LogStreamId
& staticStreamId
= LogStreamId::s_invalid
) override
;
27 virtual void DestroyStream(const LogStreamId
& streamId
) override
;
28 virtual LogStreamId
GetStreamId(const char* szName
) const override
;
29 virtual const char* GetStreamName(const LogStreamId
& streamId
) const override
;
30 virtual void VisitStreams(const LogStreamVisitor
& visitor
) const override
;
31 virtual ILogOutputPtr
CreateFileOutput(const char* szFileName
) override
;
32 virtual void Comment(const LogStreamId
& streamId
, CLogMessageMetaInfo metaInfo
, const char* szFormat
, ...) override
;
33 virtual void Warning(const LogStreamId
& streamId
, CLogMessageMetaInfo metaInfo
, const char* szFormat
, ...) override
;
34 virtual void Error(const LogStreamId
& streamId
, CLogMessageMetaInfo metaInfo
, const char* szFormat
, ...) override
;
35 virtual ECriticalErrorStatus
CriticalError(const LogStreamId
& streamId
, CLogMessageMetaInfo metaInfo
, const char* szFormat
, ...) override
;
36 virtual void FatalError(const LogStreamId
& streamId
, CLogMessageMetaInfo metaInfo
, const char* szFormat
, ...) override
;
37 virtual void Update() override
;
38 virtual SLogSignals
& Signals() override
;
39 virtual bool IsLoggingEnabled() const override
;
46 SStream(const char* _szName
, const LogStreamId
& _id
);
52 typedef std::vector
<SStream
> Streams
;
53 typedef std::vector
<ILogOutputPtr
> Outputs
;
54 typedef std::vector
<string
> UserStreams
;
55 typedef TemplateUtils::CDelegate
<void ()> SettingsModifiedCallback
;
57 struct SSettings
: public IEnvSettings
59 SSettings(const SettingsModifiedCallback
& _modifiedCallback
);
62 virtual void Serialize(Serialization::IArchive
& archive
) override
;
65 UserStreams userStreams
;
66 SettingsModifiedCallback modifiedCallback
;
69 DECLARE_SHARED_POINTERS(SSettings
)
71 static const LogStreamId FIRST_DYNAMIC_STREAM_ID
;
73 void OnSettingsModified();
74 size_t FindStream(const char* szName
) const;
75 size_t FindStream(const LogStreamId
& streamId
) const;
76 void GetUserStreamsFileName(stack_string
& fileName
) const;
78 LogStreamId m_nextDynamicStreamId
;
81 SSettingsPtr m_pSettings
;
82 SLogSignals m_signals
;
85 class CLogRecorder
: public ILogRecorder
92 virtual void Begin() override
;
93 virtual void End() override
;
94 virtual void VisitMessages(const LogMessageVisitor
& visitor
) override
;
95 virtual void Clear() override
;
100 // #SchematycTODO : This method of storing messages is far from optimal. If we start recording lots of messages we should think about creating pages of raw data.
101 struct SRecordedMessage
103 explicit SRecordedMessage(const SLogMessageData
& _logMessageData
);
105 LogStreamId streamId
;
106 ELogMessageType messageType
;
108 CLogMessageMetaInfo metaInfo
;
111 typedef std::vector
<SRecordedMessage
> SRecordedMessageVector
;
113 void OnLogMessage(const SLogMessageData
& logMessageData
);
115 SRecordedMessageVector m_recordedMessages
;
116 TemplateUtils::CConnectionScope m_connectionScope
;