deltaFlow
Logger Class Referencefinal

Singleton logger class for deltaFlow. More...

#include <Logger.H>

Public Member Functions

void log (const std::string &msg, const Level &level)
 Log a message at a given severity level.
 

Static Public Member Functions

static LoggergetLogger ()
 Get the singleton Logger instance.
 

Private Member Functions

 Logger (const std::string &name, Level level)
 Construct a logger with file name and log level.
 
 ~Logger ()
 Destructor flushes and closes log file.
 
 Logger (const Logger &)=delete
 
Loggeroperator= (const Logger &)=delete
 

Private Attributes

Level m_Level
 Minimum logging level.
 
std::string m_FilePath
 Path to the log file.
 
std::ofstream file
 Output file stream.
 

Detailed Description

Singleton logger class for deltaFlow.

Provides methods for logging messages at various severity levels to a file and/or console. Usage is typically via the provided macros.

Definition at line 99 of file Logger.H.

Constructor & Destructor Documentation

◆ Logger() [1/2]

Logger::Logger ( const std::string &  name,
Level  level 
)
private

Construct a logger with file name and log level.

Parameters
nameName or file path for the logger.
levelMinimum severity level to log.

Definition at line 34 of file Logger.C.

34 : m_FilePath(name), m_Level(level) {
35 file.open(m_FilePath);
36 if (!file.is_open()) {
37 std::cerr << "Failed to open log file: " << m_FilePath << std::endl;
38 }
39
40 // Write banner to log file
41 if (file.is_open()) {
43 auto now = std::time(nullptr);
44 auto ts = fmt::format("{:%d-%b-%Y %H:%M:%S}", fmt::localtime(now));
45 file << fmt::format("\n Log started: {}\n", ts);
46 file << " " << Display::separator('-') << "\n\n";
47 file.flush();
48 }
49}
Level m_Level
Minimum logging level.
Definition Logger.H:115
std::string m_FilePath
Path to the log file.
Definition Logger.H:116
std::ofstream file
Output file stream.
Definition Logger.H:117
std::string separator(char ch='=')
Returns a separator line of the given character.
Definition Display.H:82
std::string fileBanner()
Returns a full plain-text banner for output/log files.
Definition Display.H:217

References file, Display::fileBanner(), m_FilePath, and Display::separator().

Here is the call graph for this function:

◆ ~Logger()

Logger::~Logger ( )
private

Destructor flushes and closes log file.

Definition at line 51 of file Logger.C.

51 {
52 if (file.is_open()) {
53 auto now = std::time(nullptr);
54 auto ts = fmt::format("{:%d-%b-%Y %H:%M:%S}", fmt::localtime(now));
55 file << "\n " << Display::separator('-') << "\n";
56 file << fmt::format(" Log ended: {}\n", ts);
57 file.close();
58 }
59}

References file, and Display::separator().

Here is the call graph for this function:

◆ Logger() [2/2]

Logger::Logger ( const Logger )
privatedelete

Member Function Documentation

◆ getLogger()

Logger & Logger::getLogger ( )
static

Get the singleton Logger instance.

Returns
Reference to the Logger instance.

Definition at line 29 of file Logger.C.

29 {
30 static Logger instance("deltaFlow.log", Level::DEBUG);
31 return instance;
32}
@ DEBUG
Debug messages.
Singleton logger class for deltaFlow.
Definition Logger.H:99

References DEBUG.

◆ log()

void Logger::log ( const std::string &  msg,
const Level level 
)

Log a message at a given severity level.

Parameters
msgThe message to log.
levelThe severity level.

Definition at line 61 of file Logger.C.

61 {
62 std::string levelStr;
63 m_Level = level;
64 fmt::color levelColor = fmt::color::white;
65
66 switch (m_Level) {
67 case Level::DEBUG:
68 levelStr = "DEBUG"; levelColor = fmt::color::light_blue; break;
69 case Level::INFO:
70 levelStr = "INFO"; levelColor = fmt::color::green; break;
71 case Level::WARN:
72 levelStr = "WARN"; levelColor = fmt::color::yellow; break;
73 case Level::ERROR:
74 levelStr = "ERROR"; levelColor = fmt::color::orange_red; break;
75 case Level::CRITICAL:
76 levelStr = "CRITICAL"; levelColor = fmt::color::red; break;
77 default:
78 levelStr = "LOG"; break;
79 }
80
81 auto now = std::time(nullptr);
82 auto timestamp = fmt::format("{:%d-%m-%Y %H:%M:%S}", fmt::localtime(now));
83
84 // Plain text to log file
85 std::string logMessage = fmt::format(
86 "{} :: {:<8} :: {}\n", timestamp, levelStr, msg
87 );
88
89 if (file.is_open()) {
90 file << logMessage;
91 file.flush();
92 }
93
94 // Colored output to terminal
95 logMessage = fmt::format(
96 "{} :: {} :: {}\n",
97 timestamp,
98 fmt::format(fg(levelColor) | fmt::emphasis::bold, "{:<8}", levelStr),
99 msg
100 );
101
102 fmt::print("{}", logMessage);
103}
@ WARN
Warning conditions.
@ INFO
Informational messages.
@ CRITICAL
Critical conditions.
@ ERROR
Error conditions.
std::string timestamp()
Returns the current timestamp string.
Definition OutputFile.H:75

References CRITICAL, DEBUG, ERROR, file, INFO, m_Level, and WARN.

◆ operator=()

Logger & Logger::operator= ( const Logger )
privatedelete

Member Data Documentation

◆ file

std::ofstream Logger::file
private

Output file stream.

Definition at line 117 of file Logger.H.

◆ m_FilePath

std::string Logger::m_FilePath
private

Path to the log file.

Definition at line 116 of file Logger.H.

◆ m_Level

Level Logger::m_Level
private

Minimum logging level.

Definition at line 115 of file Logger.H.


The documentation for this class was generated from the following files: