27#include <boost/algorithm/string.hpp>
29#define FIELD_SEPARATOR "\n\t"
33 std::function<std::string(
const ers::Issue & issue )> getTimeFormatter()
36 "DUNEDAQ_ERS_TIMESTAMP_FORMAT",
"%Y-%b-%d %H:%M:%S");
39 "DUNEDAQ_ERS_TIMESTAMP_PRECISION",
"MILLI");
41 static const bool isUTC = ::getenv(
"DUNEDAQ_ERS_TIMESTAMP_UTC");
43 if ( boost::algorithm::ifind_first(precision,
"NANO") ) {
45 return issue.
time<std::chrono::nanoseconds>(format, isUTC);
49 if ( boost::algorithm::ifind_first(precision,
"MICRO") ) {
51 return issue.
time<std::chrono::microseconds>(format, isUTC);
55 if ( boost::algorithm::ifind_first(precision,
"MILLI") ) {
57 return issue.
time<std::chrono::milliseconds>(format, isUTC);
62 return issue.
time(format, isUTC);
66 const auto formatted_time = getTimeFormatter();
72 print( out, issue, verbosity );
82 out << formatted_time( issue ) <<
" ";
100 for ( ers::string_map::const_iterator it = issue.
parameters().begin(); it != issue.
parameters().end(); ++it )
102 out <<
"'" << it->first <<
"=" << it->second <<
"' ";
106 for ( std::vector<std::string>::const_iterator it = issue.
qualifiers().begin(); it != issue.
qualifiers().end(); ++it )
108 out <<
"'" << *it <<
"' ";
124 std::ios_base::fmtflags flags( out.flags() );
127 std::vector<std::string> stack = issue.
context().
stack();
129 for(
size_t i = 0; i < stack.size(); i++ )
virtual const char * user_name() const =0
virtual int user_id() const =0
virtual pid_t thread_id() const =0
virtual const char * host_name() const =0
std::string position(int verbosity=ers::Configuration::instance().verbosity_level()) const
virtual pid_t process_id() const =0
virtual const char * cwd() const =0
std::vector< std::string > stack() const
Base class for any user define issue.
const Context & context() const
Context of the issue.
ers::Severity severity() const
severity of the issue
const std::vector< std::string > & qualifiers() const
return array of qualifiers
const std::string & message() const
General cause of the issue.
const string_map & parameters() const
return array of parameters
std::string time(const std::string &format="%Y-%b-%d %H:%M:%S", bool isUTC=false) const
string representation of local time of the issue
const Issue * cause() const
return the cause Issue of this Issue
int read_from_environment(const char *name, int default_value)
std::string to_string(severity s)
static std::ostream & print(std::ostream &out, const Issue &issue, int verbosity)
static std::ostream & println(std::ostream &out, const Issue &issue, int verbosity)