Diarkis C++Client Library API Document
ThreadedLoggerBackend.h
Go to the documentation of this file.
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <atomic>
6 #include <mutex>
7 #include <thread>
8 #include "diarkis/common.h"
11 #include "diarkis/system/Thread.h"
12 #include "diarkis/system/result.h"
14 
15 using namespace Diarkis::System;
16 
24 {
25  public:
38  ThreadedLoggerBackend(std::shared_ptr<ILoggerBackend> loggerBackend, bool bDirect=false);
45  virtual ~ThreadedLoggerBackend();
52  void Stop();
53 
54  Result Log(const Diarkis::StdString& message, bool includeNewLine = true) override;
55 
56  private:
57  struct LogInfo
58  {
59  Diarkis::StdString message;
60  bool includeNewLine;
61  };
62 
63  const std::shared_ptr<ILoggerBackend> loggerBackend_;
64  std::shared_ptr<Diarkis::System::DiarkisThread> thread_;
65  std::atomic<bool> isRunning_;
66  std::mutex mutex_;
67  Diarkis::StdQueue<LogInfo> messageQueueLog_;
68 
69  // Whether to output directly instead of storing in a queue.
70  // This is for debugging and normally false.
71  bool bDirectOutput_;
72 
79  void FlushLogs();
80 
87  static Diarkis::System::Result ThreadLoop(void*);
88 };
ThreadedLoggerBackend
Class for outputting logs using threads.
Definition: ThreadedLoggerBackend.h:23
ThreadedLoggerBackend::ThreadedLoggerBackend
ThreadedLoggerBackend(std::shared_ptr< ILoggerBackend > loggerBackend, bool bDirect=false)
Constructor for ThreadedLoggerBackend.
Definition: ThreadedLoggerBackend.cpp:15
Diarkis::System::DiarkisThreadParams::func
ThreadFunc func
Pointer to function to be invoked by thread.
Definition: Thread.h:95
ThreadedLoggerBackend.h
Diarkis::Results
Definition: results.autogen.h:10
Component.h
Diarkis::StdString
Definition: common.h:432
ThreadedLoggerBackend::Stop
void Stop()
Stop the logging thread.
Definition: ThreadedLoggerBackend.cpp:41
Diarkis::System::Result
Contains information about a specific result value. Can be compared against another Result structure....
Definition: result.h:37
Diarkis::System::DiarkisThreadParams::priority
DiarkisThreadPriority priority
Definition: Thread.h:91
ThreadedLoggerBackend::~ThreadedLoggerBackend
virtual ~ThreadedLoggerBackend()
ThreadedLoggerBackend destructor.
Definition: ThreadedLoggerBackend.cpp:37
LoggerBackend.h
Diarkis::System::DiarkisThreadParams
Parameters for thread startup.
Definition: Thread.h:85
Diarkis::System
Definition: result.h:11
Diarkis::System::DiarkisThreadParams::affinityMask
uint32_t affinityMask
CPU affinity mask.
Definition: Thread.h:97
helpers.h
ILoggerBackend
Interface class for AggregateLoggerBackend, ConsoleLoggerBackend, StreamLoggerBackend,...
Definition: LoggerBackend.h:17
Diarkis::System::DiarkisThreadParams::name
Diarkis::StdString name
Thread name (PS4: up to 32 bytes including the terminating NULL character) or NULL.
Definition: Thread.h:89
result.h
Thread.h
common.h
Diarkis::Results::SUCCESS
DIARKIS_EXPORT System::Result SUCCESS
Everything went according to plan. (status: NONE, value: 0)
results.autogen.h
Diarkis::StdQueue
std::queue< T, StdDeque< T > > StdQueue
Definition: common.h:529
Diarkis::System::DiarkisThreadParams::stackSize
uint32_t stackSize
Stack size of the thread.
Definition: Thread.h:99
ThreadedLoggerBackend::Log
Result Log(const Diarkis::StdString &message, bool includeNewLine=true) override
Outputs a log of specified messages.
Definition: ThreadedLoggerBackend.cpp:59