Rendering Engine 0.2.9
Modular Graphics Rendering Engine | v0.2.9
logger.hpp
Go to the documentation of this file.
1// This file is part of the Rendering Engine project.
2// Author: Alexander Obzherin <alexanderobzherin@gmail.com>
3// Copyright (c) 2026 Alexander Obzherin
4// Distributed under the terms of the zlib License. See LICENSE.md for details.
5
6/**
7 * @file logger.hpp
8 * @brief Engine-wide logging system for runtime diagnostics and performance tracking.
9 *
10 * The Logger class provides a lightweight, thread-safe logging facility
11 * for the Rendering Engine. A dedicated log file is created per application run.
12 *
13 * Log messages include:
14 * - Timestamp (human-readable)
15 * - Log level (Debug, Info, Warning, Error)
16 * - Thread ID
17 * - Source file and line number
18 *
19 * The logger supports runtime-configurable log levels via application configuration.
20 *
21 * Usage:
22 * @code
23 * LOG_INFO("Renderer initialized");
24 * LOG_ERROR("Failed to load texture");
25 * @endcode
26 */
27
28#pragma once
29
31
32#include <string>
33#include <iostream>
34#include <fstream>
35#include <mutex>
36
37
38#define LOG_DEBUG(msg) rendering_engine::Logger::Get().Log(LogLevel::Debug, msg, __FILE__, __LINE__)
39#define LOG_INFO(msg) rendering_engine::Logger::Get().Log(LogLevel::Info, msg, __FILE__, __LINE__)
40#define LOG_WARNING(msg) rendering_engine::Logger::Get().Log(LogLevel::Warning, msg, __FILE__, __LINE__)
41#define LOG_ERROR(msg) rendering_engine::Logger::Get().Log(LogLevel::Error, msg, __FILE__, __LINE__)
42
43namespace rendering_engine
44{
45/**
46 * @enum LogLevel
47 * @brief Defines severity levels for log messages.
48 *
49 * Levels are ordered by increasing severity:
50 * Debug < Info < Warning < Error
51 *
52 * Log filtering is performed by comparing message level
53 * against the configured runtime level.
54 */
55enum class LogLevel
56{
57 Debug, ///< Detailed diagnostic information
58 Info, ///< General informational messages
59 Warning, ///< Non-critical issues or unexpected states
60 Error ///< Critical errors affecting functionality
61};
62/**
63 * @class Logger
64 * @brief Singleton engine-wide logging system.
65 *
66 * Responsibilities:
67 * - Create log file per application run
68 * - Write formatted log entries
69 * - Apply runtime log-level filtering
70 * - Ensure thread-safe file access
71 *
72 * The logger must be initialized during application startup
73 * and shutdown during application termination.
74 */
76{
77public:
78 /**
79 * @brief Returns singleton logger instance.
80 */
81 static Logger& Get();
82 /**
83 * @brief Initializes logging system and creates a new log file.
84 * @param appName Name of the application (used in log filename).
85 */
86 void Initialize(const std::string& appName);
87 /**
88 * @brief Finalizes logging system and closes the log file.
89 */
90 void Shutdown();
91 /**
92 * @brief Writes a formatted log message.
93 *
94 * @param level Log severity level.
95 * @param message Log message string.
96 * @param file Source file name.
97 * @param line Source line number.
98 */
99 void Log(LogLevel level,
100 const std::string& message,
101 const char* file,
102 int line);
103
104private:
105 /**
106 * @brief Reads configured log level from application config file.
107 * @return LogLevel parsed from configuration.
108 */
109 LogLevel ReadConfiguredLogLevel();
110 /**
111 * @brief Sets current runtime log level.
112 * @param level Desired log level.
113 */
114 void SetLogLevel(LogLevel level);
115
116private:
117 std::ofstream mFile;
118 std::mutex mMutex;
119 LogLevel mCurrentLevel;
120};
121} // namespace rendering_engine
Singleton engine-wide logging system.
Definition: logger.hpp:76
LogLevel
Defines severity levels for log messages.
Definition: logger.hpp:56
@ Warning
Non-critical issues or unexpected states.
@ Info
General informational messages.
@ Error
Critical errors affecting functionality.
@ Debug
Detailed diagnostic information.
#define RE_API