Project

General

Profile

Download (2.46 KB) Statistics
| Branch: | Revision:
2c54c4c3 david.sorber
/********************************************************************
* CONFIDENTIAL - All source code is the propriety and confidential *
* information of David Sorber. *
* *
* Copyright 2024 David Sorber *
* Unpublished -- all rights reserved under the copyright laws *
* of the United States. *
********************************************************************/

#include <cstdio>
#include <chrono>
#include <stdexcept>

#include "Logger.h"


DBS::Logger::Logger(CopyManagerOptions* configObj)
: r_options(*configObj)
{
m_outputStream.str("");
m_logFile.open("loggy"/*r_config.getLogPath()*/, std::ios::out | std::ios::app);
if (! m_logFile)
{
throw std::runtime_error("Unable to open log file: " /*+ r_config.getLogPath()*/);
}
}

DBS::Logger::~Logger()
{
m_logFile.close();
}

void DBS::Logger::log_msg(
enum LOG_LEVEL level,
const std::string& msg)
{
if (level > 3)//r_config.getLogLevel())
{
return;
}

struct timeval tv;
struct tm *tm;
gettimeofday(&tv, NULL);
tm = localtime(&tv.tv_sec);

char time_format[64], time_str[64];

const bool LOG_WITH_MILLISECONDS = true;
if (LOG_WITH_MILLISECONDS == true)
{
// Set format to include milliseconds
strftime(time_format, sizeof(time_format), "%a %b %d %H:%M:%S.%%03u %Y",
tm);
std::snprintf(time_str, sizeof(time_str), time_format, (tv.tv_usec / 1000));
}
else
{
// Set format to not include milliseconds
strftime(time_str, sizeof(time_str), "%a %b %d %H:%M:%S %Y", tm);
}

// NOTE: "COMPONENT_ID" must be defined somewhere, ideally at compile time
switch (level)
{
case error:
m_logFile << time_str << "|ERROR|copytool|" << msg << std::endl;
break;

case warn:
m_logFile << time_str << "|WARNING|copytool|" << msg << std::endl;
break;

case info:
m_logFile << time_str << "|INFO|copytool|" << msg << std::endl;
break;

case debug:
m_logFile << time_str << "|DEBUG|copytool|" << msg << std::endl;
break;

case trace:
m_logFile << time_str << "|TRACE|copytool|" << msg << std::endl;
break;

default:
break;
}
}