/*
|
* logger.cc
|
*
|
*
|
* Logger Library
|
*
|
*
|
* Copyright (C) 2013-2017 Bryant Moscon - bmoscon@gmail.com
|
*
|
* Please see the LICENSE file for the terms and conditions
|
* associated with this software.
|
*
|
*/
|
|
#include "logger.hpp"
|
|
Logger::Logger(std::ostream& s) : _file(),
|
_log(s),
|
_level(INFO),
|
_line_level(VERBOSE),
|
_default_line_level(VERBOSE)
|
{
|
}
|
|
|
Logger::Logger(const char *f) : _file(f, std::ios::out | std::ios::app),
|
_log(_file),
|
_level(INFO),
|
_line_level(VERBOSE),
|
_default_line_level(VERBOSE)
|
{
|
assert(_file.is_open());
|
}
|
|
|
Logger::Logger(const std::string& f) : _file(f.c_str(), std::ios::out | std::ios::app),
|
_log(_file),
|
_level(INFO),
|
_line_level(VERBOSE),
|
_default_line_level(VERBOSE)
|
{
|
assert(_file.is_open());
|
}
|
|
|
Logger::~Logger()
|
{
|
if (_file.is_open()) {
|
_log.flush();
|
_file.close();
|
}
|
else {
|
_log.flush();
|
}
|
}
|
|
|
void Logger::set_level(const logger_level& level)
|
{
|
_level = level;
|
}
|
|
|
void Logger::set_default_line_level(const logger_level& level)
|
{
|
_default_line_level = level;
|
}
|
|
|
void Logger::flush()
|
{
|
if (_line_level >= _level) {
|
_log << get_time() << " -- [" << level_str(_line_level) << "] -- " << str();
|
if (_file.is_open())
|
_log.flush();
|
}
|
|
str("");
|
_line_level = _default_line_level;
|
}
|
|
|
Logger& Logger::operator<<(const logger_level& level)
|
{
|
_line_level = level;
|
return (*this);
|
}
|
|
|
Logger& Logger::operator<<(LoggerManip m)
|
{
|
return m(*this);
|
}
|
|
|
std::string Logger::get_time() const
|
{
|
struct tm *timeinfo;
|
time_t rawtime;
|
char *time_buf;
|
|
time(&rawtime);
|
timeinfo = localtime(&rawtime);
|
time_buf = asctime(timeinfo);
|
|
std::string ret(time_buf);
|
if (!ret.empty() && ret[ret.length() - 1] == '\n') {
|
ret.erase(ret.length()-1);
|
}
|
|
return (ret);
|
}
|
|
|
inline const char* Logger::level_str(const logger_level& level)
|
{
|
switch (level) {
|
case VERBOSE:
|
return ("VRB");
|
case DEBUG:
|
return ("DBG");
|
case INFO:
|
return ("INF");
|
case WARNING:
|
return ("WRN");
|
case ERROR:
|
return ("ERR");
|
case CRITICAL:
|
return ("CRT");
|
default:
|
assert(false);
|
}
|
}
|