ticker #11 fixed: Merge eoParser and eoParserLogger
This commit is contained in:
parent
e103f4f29e
commit
7d9151e2f4
5 changed files with 103 additions and 189 deletions
|
|
@ -37,19 +37,20 @@ Authors:
|
|||
#include <cstdio> // used to define EOF
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <exception>
|
||||
#include <stdexcept>
|
||||
#include <locale>
|
||||
|
||||
#include "eoLogger.h"
|
||||
|
||||
eoLogger eo::log;
|
||||
eoLogger::eoLogger() :
|
||||
std::ostream(&_obuf),
|
||||
|
||||
eoLogger::eoLogger()
|
||||
: std::ostream(&_obuf),
|
||||
_selectedLevel(eo::progress), _contextLevel(eo::quiet),
|
||||
_fd(2), _obuf(_fd, _contextLevel, _selectedLevel)
|
||||
_verbose("quiet", "verbose", "Set the verbose level", 'v'),
|
||||
_printVerboseLevels(false, "print-verbose-levels", "Print verbose levels", 'l'),
|
||||
_output("", "output", "Redirect a standard output to a file", 'o'),
|
||||
|
||||
_selectedLevel(eo::progress),
|
||||
_contextLevel(eo::quiet),
|
||||
_fd(2),
|
||||
_obuf(_fd, _contextLevel, _selectedLevel)
|
||||
{
|
||||
_standard_io_streams[&std::cout] = 1;
|
||||
_standard_io_streams[&std::clog] = 2;
|
||||
|
|
@ -71,18 +72,56 @@ eoLogger::~eoLogger()
|
|||
if (_fd > 2) { ::close(_fd); }
|
||||
}
|
||||
|
||||
std::string eoLogger::className() const
|
||||
void eoLogger::_createParameters( eoParser& parser )
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// we are saying to eoParser to create the parameters created above.
|
||||
//------------------------------------------------------------------
|
||||
|
||||
std::string section("Logger");
|
||||
parser.processParam(_verbose, section);
|
||||
parser.processParam(_printVerboseLevels, section);
|
||||
parser.processParam(_output, section);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// we're gonna redirect the log to the given filename if -o is used.
|
||||
//------------------------------------------------------------------
|
||||
|
||||
if ( ! _output.value().empty() )
|
||||
{
|
||||
eo::log << eo::file( _output.value() );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// // we're gonna print the list of levels if -l parameter is used.
|
||||
//------------------------------------------------------------------
|
||||
|
||||
if ( _printVerboseLevels.value() )
|
||||
{
|
||||
eo::log.printLevels();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
}
|
||||
|
||||
std::string eoLogger::className() const
|
||||
{
|
||||
return ("eoLogger");
|
||||
}
|
||||
|
||||
void eoLogger::addLevel(std::string name, eo::Levels level)
|
||||
void eoLogger::addLevel(std::string name, eo::Levels level)
|
||||
{
|
||||
_levels[name] = level;
|
||||
_sortedLevels.push_back(name);
|
||||
}
|
||||
|
||||
void eoLogger::printLevels() const
|
||||
void eoLogger::printLevels() const
|
||||
{
|
||||
std::cout << "Available verbose levels:" << std::endl;
|
||||
|
||||
|
|
@ -95,25 +134,25 @@ void eoLogger::printLevels() const
|
|||
::exit(0);
|
||||
}
|
||||
|
||||
eoLogger& operator<<(eoLogger& l, const eo::Levels lvl)
|
||||
eoLogger& operator<<(eoLogger& l, const eo::Levels lvl)
|
||||
{
|
||||
l._contextLevel = lvl;
|
||||
return l;
|
||||
}
|
||||
|
||||
eoLogger& operator<<(eoLogger& l, eo::file f)
|
||||
eoLogger& operator<<(eoLogger& l, eo::file f)
|
||||
{
|
||||
l._fd = ::open(f._f.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0644);
|
||||
return l;
|
||||
}
|
||||
|
||||
eoLogger& operator<<(eoLogger& l, eo::setlevel v)
|
||||
eoLogger& operator<<(eoLogger& l, eo::setlevel v)
|
||||
{
|
||||
l._selectedLevel = (v._lvl < 0 ? l._levels[v._v] : v._lvl);
|
||||
return l;
|
||||
}
|
||||
|
||||
eoLogger& operator<<(eoLogger& l, std::ostream& os)
|
||||
eoLogger& operator<<(eoLogger& l, std::ostream& os)
|
||||
{
|
||||
if (l._standard_io_streams.find(&os) != l._standard_io_streams.end())
|
||||
{
|
||||
|
|
@ -128,7 +167,7 @@ eoLogger::outbuf::outbuf(const int& fd,
|
|||
: _fd(fd), _contextLevel(contexlvl), _selectedLevel(selectedlvl)
|
||||
{}
|
||||
|
||||
int eoLogger::outbuf::overflow(int_type c)
|
||||
int eoLogger::outbuf::overflow(int_type c)
|
||||
{
|
||||
if (_selectedLevel >= _contextLevel)
|
||||
{
|
||||
|
|
@ -141,7 +180,7 @@ int eoLogger::outbuf::overflow(int_type c)
|
|||
return c;
|
||||
}
|
||||
|
||||
namespace eo
|
||||
namespace eo
|
||||
{
|
||||
file::file(const std::string f)
|
||||
: _f(f)
|
||||
|
|
@ -155,3 +194,13 @@ namespace eo
|
|||
: _v(std::string("")), _lvl(lvl)
|
||||
{}
|
||||
}
|
||||
|
||||
//! make_verbose gets level of verbose and sets it in eoLogger
|
||||
void make_verbose(eoParser& parser)
|
||||
{
|
||||
eo::log._createParameters( parser );
|
||||
|
||||
eo::log << eo::setlevel(eo::log._verbose.value());
|
||||
}
|
||||
|
||||
eoLogger eo::log;
|
||||
|
|
|
|||
Reference in a new issue