blob: 254a177452499de791c6dbe97f6cf18526ceeaa4 [file] [log] [blame]
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -05001#include "logger.hpp"
2
3#include <sstream>
4
5namespace vpd
6{
Sunny Srivastava5779d972025-08-08 01:45:23 -05007std::shared_ptr<Logger> Logger::m_loggerInstance;
8
9void Logger::logMessage(std::string_view i_message,
10 const PlaceHolder& i_placeHolder,
11 const types::PelInfoTuple* i_pelTuple,
12 const std::source_location& i_location)
13{
14 std::ostringstream l_log;
15 l_log << "FileName: " << i_location.file_name() << ","
16 << " Line: " << i_location.line() << " " << i_message;
17
Souvik Roya5e18b82025-09-25 05:59:56 +000018 if ((i_placeHolder == PlaceHolder::COLLECTION) && m_collectionLogger)
Sunny Srivastava5779d972025-08-08 01:45:23 -050019 {
20 // Log it to a specific place.
Souvik Roya8c3c092025-09-11 10:49:29 +000021 m_collectionLogger->logMessage(l_log.str());
Sunny Srivastava5779d972025-08-08 01:45:23 -050022 }
23 else if (i_placeHolder == PlaceHolder::PEL)
24 {
25 if (i_pelTuple)
26 {
27 // LOG PEL
28 // This should call create PEL API from the event logger.
29 return;
30 }
31 std::cout << "Pel info tuple required to log PEL for message <" +
32 l_log.str() + ">"
33 << std::endl;
34 }
Souvik Roya5e18b82025-09-25 05:59:56 +000035 else if ((i_placeHolder == PlaceHolder::VPD_WRITE) && m_vpdWriteLogger)
36 {
Souvik Roya8c3c092025-09-11 10:49:29 +000037 m_vpdWriteLogger->logMessage(l_log.str());
Souvik Roya5e18b82025-09-25 05:59:56 +000038 }
Sunny Srivastava5779d972025-08-08 01:45:23 -050039 else
40 {
41 // Default case, let it go to journal.
42 std::cout << l_log.str() << std::endl;
43 }
44}
45
Souvik Roya5e18b82025-09-25 05:59:56 +000046void Logger::initiateVpdCollectionLogging() noexcept
47{
48 try
49 {
50 /* TODO:
51 - check /var/lib/vpd for number "collection.*" log file
52 - if 3 collection_[0-2].log files are found
53 - delete collection_1.log
54 - create collection logger object with collection_1.log
55 parameter
56 - else
57 - create collection logger object with collection_(n+1).log
58 parameter*/
59 }
60 catch (const std::exception& l_ex)
61 {
62 logMessage("Failed to initialize collection logger. Error: " +
63 std::string(l_ex.what()));
64 }
65}
66
Souvik Roy6bd74ad2025-09-12 06:24:06 +000067void SyncFileLogger::logMessage(const std::string_view& i_message)
68{
69 try
70 {
71 if (++m_currentNumEntries > m_maxEntries)
72 {
73 rotateFile();
74 }
75 m_fileStream << timestamp() << " : " << i_message << std::endl;
76 }
77 catch (const std::exception& l_ex)
78 {
79 // log message to journal if we fail to log to file
80 auto l_logger = Logger::getLoggerInstance();
81 l_logger->logMessage(i_message);
82 }
83}
84
Souvik Roya8c3c092025-09-11 10:49:29 +000085void ILogFileHandler::rotateFile(
86 [[maybe_unused]] const unsigned i_numEntriesToDelete)
Souvik Roy6bd74ad2025-09-12 06:24:06 +000087{
88 /* TODO:
89 - delete specified number of oldest entries from beginning of file
90 - rewrite file to move existing logs to beginning of file
91 */
92 m_currentNumEntries = m_maxEntries - i_numEntriesToDelete;
93}
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -050094namespace logging
95{
96void logMessage(std::string_view message, const std::source_location& location)
97{
98 std::ostringstream log;
99 log << "FileName: " << location.file_name() << ","
100 << " Line: " << location.line() << " " << message;
101
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -0500102 std::cout << log.str() << std::endl;
103}
104} // namespace logging
105} // namespace vpd