NVIDIA NvNeural SDK  2022.2
GPU inference framework for NVIDIA Nsight Deep Learning Designer
BufferedLogger.h
Go to the documentation of this file.
1 /*
2 * SPDX-FileCopyrightText: Copyright (c) 2020-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3 * SPDX-License-Identifier: MIT
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23 
25 
26 #ifndef NVNEURAL_BUFFEREDLOGGER_H
27 #define NVNEURAL_BUFFEREDLOGGER_H
28 
29 #include <nvneural/CoreHelpers.h>
30 #include <atomic>
31 #include <cstdarg>
32 #include <mutex>
33 #include <string>
34 #include <vector>
35 
36 namespace nvneural {
37 
47 {
48 public:
50  static const IRefObject::TypeId typeID = 0xb19309bc19e64b5dul;
51 
55  virtual NeuralResult forwardBufferedLogs(ILogger* pDestinationLogger) noexcept = 0;
56 };
57 
61 class BufferedLogger : public IBufferedLogger, public ILogger
62 {
63  enum class Severity
64  {
65  Normal,
66  Warning,
67  Error,
68  };
69 
70  struct LogEntry
71  {
73  Severity severity;
74  std::string message;
75  };
76 
77 public:
78  // IRefObject members
79  IRefObject::RefCount addRef() const noexcept override;
80  IRefObject::RefCount release() const noexcept override;
81  void* queryInterface(IRefObject::TypeId interface) noexcept override;
82  const void* queryInterface(IRefObject::TypeId interface) const noexcept override;
83 
84  // ILogger members
85  ILogger::VerbosityLevel verbosity() const noexcept override;
86  NeuralResult log(VerbosityLevel verbosity, const char* format, ...) noexcept override;
87  NeuralResult logWarning(VerbosityLevel verbosity, const char* format, ...) noexcept override;
88  NeuralResult logError(VerbosityLevel verbosity, const char* format, ...) noexcept override;
89 
90  // IBufferedLogger members
91  NeuralResult forwardBufferedLogs(ILogger* pDestinationLogger) noexcept override;
92 
93 private:
94  NeuralResult bufferLogEntry(VerbosityLevel verbosity, Severity severity, const char* format, va_list args) noexcept;
95  NeuralResult forwardLogEntryUnderLock(const LogEntry& logEntry) noexcept;
96 
97  RefPtr<ILogger> m_pForwarder;
98  std::mutex m_logMutex;
99  std::vector<LogEntry> m_logBuffer;
100  mutable std::atomic<IRefObject::RefCount> m_refCount{1u};
101 };
102 
103 } // namespace nvneural
104 
105 #endif // NVNEURAL_BUFFEREDLOGGER_H
Common helper classes and template function implementations.
NeuralResult
NeuralResult is a generic success/failure result type similar to COM HRESULT.
Definition: CoreTypes.h:275
BufferedLogger is a default implementation of IBufferedLogger.
Definition: BufferedLogger.h:62
NeuralResult logWarning(VerbosityLevel verbosity, const char *format,...) noexcept
Logs a warning message.
Definition: BufferedLogger.cpp:104
NeuralResult forwardBufferedLogs(ILogger *pDestinationLogger) noexcept
Forwards stored logs to a target logger.
Definition: BufferedLogger.cpp:122
void * queryInterface(IRefObject::TypeId interface) noexcept
Retrieves a new object interface pointer.
Definition: BufferedLogger.cpp:46
NeuralResult log(VerbosityLevel verbosity, const char *format,...) noexcept
Logs an informational message.
Definition: BufferedLogger.cpp:95
IRefObject::RefCount release() const noexcept
Decrements the object's reference count and destroy the object if the reference count reaches zero.
Definition: BufferedLogger.cpp:36
IRefObject::RefCount addRef() const noexcept
Increments the object's reference count.
Definition: BufferedLogger.cpp:30
ILogger::VerbosityLevel verbosity() const noexcept
Retrieves the current verbosity level.
Definition: BufferedLogger.cpp:90
NeuralResult logError(VerbosityLevel verbosity, const char *format,...) noexcept
Logs an error message.
Definition: BufferedLogger.cpp:113
Buffering loggers store log messages during startup.
Definition: BufferedLogger.h:47
static const IRefObject::TypeId typeID
Interface TypeId for InterfaceOf purposes.
Definition: BufferedLogger.h:50
virtual NeuralResult forwardBufferedLogs(ILogger *pDestinationLogger) noexcept=0
Forwards stored logs to a target logger.
Logger interface class.
Definition: CoreTypes.h:414
std::int32_t VerbosityLevel
Typedef for verbosity levels.
Definition: CoreTypes.h:424
Base class for all objects, similar to COM's IUnknown.
Definition: CoreTypes.h:343
std::uint64_t TypeId
Every interface must define a unique TypeId. This should be randomized.
Definition: CoreTypes.h:349
std::uint32_t RefCount
Typedef used to track the number of active references to an object.
Definition: CoreTypes.h:346
Intrusive pointer using IRefObject's reference counting system.
Definition: RefPtr.h:46