16#include <boost/algorithm/string.hpp>
18#define FIELD_SEPARATOR "\n\t"
22 std::function<std::string(
const ers::Issue & issue )> getTimeFormatter()
25 "DUNEDAQ_ERS_TIMESTAMP_FORMAT",
"%Y-%b-%d %H:%M:%S");
28 "DUNEDAQ_ERS_TIMESTAMP_PRECISION",
"MILLI");
30 static const bool isUTC = ::getenv(
"DUNEDAQ_ERS_TIMESTAMP_UTC");
32 if ( boost::algorithm::ifind_first(precision,
"NANO") ) {
34 return issue.
time<std::chrono::nanoseconds>(format, isUTC);
38 if ( boost::algorithm::ifind_first(precision,
"MICRO") ) {
40 return issue.
time<std::chrono::microseconds>(format, isUTC);
44 if ( boost::algorithm::ifind_first(precision,
"MILLI") ) {
46 return issue.
time<std::chrono::milliseconds>(format, isUTC);
51 return issue.
time(format, isUTC);
55 const auto formatted_time = getTimeFormatter();
61 print( out, issue, verbosity );
71 out << formatted_time( issue ) <<
" ";
89 for ( ers::string_map::const_iterator it = issue.
parameters().begin(); it != issue.
parameters().end(); ++it )
91 out <<
"'" << it->first <<
"=" << it->second <<
"' ";
95 for ( std::vector<std::string>::const_iterator it = issue.
qualifiers().begin(); it != issue.
qualifiers().end(); ++it )
97 out <<
"'" << *it <<
"' ";
113 std::ios_base::fmtflags flags( out.flags() );
116 std::vector<std::string> stack = issue.
context().
stack();
118 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)