123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // // ******************************************************************
- // // /\ /| @File Logger.cpp
- // // \ V/ @Brief
- // // | "") @Author lijinwen, ghz005@uni-trend.com.cn
- // // / | @Creation 2024-05-16
- // // / \\ @Modified 2024-05-16
- // // *(__\_\
- // // ******************************************************************
- #include "Logger.h"
- namespace Protocol
- {
- std::mutex Logger::InstanceMutex_ = std::mutex();
- Logger Logger::Instance_ = Logger();
- Logger::Logger()
- {
- LogPath_ = "./DecoderLogs/";
- if (!Fs::exists(LogPath_))
- {
- Fs::create_directories(LogPath_);
- }
- // Generate the log file name with the current date.
- time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
- tm nowTm;
- localtime_s(&nowTm, &now); // 使用线程安全的localtime_s
- std::stringstream logFileNameStream;
- logFileNameStream << LogPath_ << "2024." << std::put_time(&nowTm, "%m.%d") << ".log";
- LogFileName_ = logFileNameStream.str();
- LogFile_.open(LogFileName_, std::ios::out | std::ios::app);
- }
- void Logger::Log(const std::string& message)
- {
- std::lock_guard<std::mutex> lock(InstanceMutex_); // 锁定以保证线程安全
- time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
- tm nowTm;
- localtime_s(&nowTm, &now); // 使用线程安全的localtime_s
- std::stringstream timeStream;
- timeStream << std::put_time(&nowTm, "%Y-%m-%d %X");
- std::ofstream& logFile = Instance_.LogFile_;
- if (logFile.is_open())
- {
- logFile << "[" << timeStream.str() << "] - " << message << std::endl;
- logFile.flush(); // 确保立即写入文件
- }
- }
- Logger::~Logger()
- {
- if (LogFile_.is_open())
- {
- LogFile_.close();
- }
- }
- void WriteLog(LogLevel level, const char* format, ...)
- {
- if (Logger::LogLevel != LogLevel::All
- && (Logger::LogLevel == LogLevel::Close || level > Logger::LogLevel))
- {
- return;
- }
- va_list args;
- va_start(args, format);
- char buffer[1024];
- vsnprintf(buffer, sizeof(buffer), format, args);
- va_end(args);
- Logger::Log(buffer);
- }
- }
|