DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
ers::erstraceStream Struct Reference

#include <Logger.hxx>

Inheritance diagram for ers::erstraceStream:
[legend]
Collaboration diagram for ers::erstraceStream:
[legend]

Public Member Functions

void write (const ers::Issue &issue)
 
- Public Member Functions inherited from ers::OutputStream
virtual ~OutputStream ()
 Sends the issue into this stream.
 

Additional Inherited Members

- Protected Member Functions inherited from ers::OutputStream
 OutputStream ()
 
OutputStreamchained ()
 
virtual bool isNull () const
 

Detailed Description

Definition at line 203 of file Logger.hxx.

Member Function Documentation

◆ write()

void ers::erstraceStream::write ( const ers::Issue & issue)
inlinevirtual

Implements ers::OutputStream.

Definition at line 204 of file Logger.hxx.

205 {
206 ers::Severity sev = issue.severity();
207 uint8_t lvl_=TLVL_DEBUG;
208 switch (sev.type) {
209 case ers::Debug: lvl_=TLVL_DEBUG+sev.rank;break;
210 case ers::Log: lvl_=TLVL_LOG; break;
211 case ers::Information: lvl_=TLVL_INFO; break;
212 case ers::Warning: lvl_=TLVL_WARNING; break;
213 case ers::Error: lvl_=TLVL_ERROR; break;
214 case ers::Fatal: lvl_=TLVL_FATAL; break;
215 }
216 struct { char tn[TRACE_TN_BUFSZ]; } _trc_;
217 if (TRACE_INIT_CHECK(trace_name(TRACE_NAME,issue.context().file_name(),_trc_.tn,sizeof(_trc_.tn)))) {
218 if (traceControl_rwp->mode.bits.M && (traceLvls_p[traceTID].M & TLVLMSK(lvl_))) {
219 struct timeval lclTime;
220 std::chrono::system_clock::time_point tp{issue.ptime()};
221 //auto micros = std::chrono::duration_cast<std::chrono::microseconds>(tp.time_since_epoch());
222 std::chrono::microseconds micros = std::chrono::duration_cast<std::chrono::microseconds>(tp.time_since_epoch());
223 lclTime.tv_sec = micros.count() / 1000000;
224 lclTime.tv_usec = micros.count() % 1000000;
225 int traceID = trace_name2TID( trace_name(TRACE_NAME,issue.context().file_name(),_trc_.tn,sizeof(_trc_.tn)) );
226 std::string complete_message = issue.message();
227 const ers::Issue *issp = &issue;
228 while ((issp=issp->cause())) {
229 char fbuf[0x100], tbuf[0x40];
230 int strip_ns=1;
231 tp = issp->ptime();
232 std::chrono::milliseconds millis
233 = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch());
234 struct tm tm_s;
235 time_t secs = millis.count() / 1000;
236 localtime_r(&secs, &tm_s);
237 if (strftime(tbuf, sizeof(tbuf), "%Y-%b-%d %H:%M:%S", &tm_s) == 0)
238 tbuf[0]= '\0';
239 complete_message += "\n\tcaused by: " + std::string(tbuf);
240 int milliseconds = millis.count() % 1000;
241 sprintf(tbuf,",%03d ",milliseconds);
242 complete_message += std::string(tbuf);
243 trace_func_to_short_func(issp->context().function_name(), fbuf, sizeof(fbuf), strip_ns);
244 complete_message += ers::to_string(issp->severity())
245 + " [" + fbuf + " at "
246 + trace_path_components(issp->context().file_name(),0)
247 + ":" + std::to_string(issp->context().line_number())
248 + "] " + issp->message();
249 }
250 trace(&lclTime, traceID, lvl_, issue.context().line_number(),
251 issue.context().function_name(),
252 0 TRACE_XTRA_PASSED, complete_message.c_str());
253 }
254 }
255 chained().write( issue );
256 }
virtual int line_number() const =0
virtual const char * file_name() const =0
virtual const char * function_name() const =0
Base class for any user define issue.
Definition Issue.hpp:69
const Context & context() const
Context of the issue.
Definition Issue.hpp:100
ers::Severity severity() const
severity of the issue
Definition Issue.hpp:112
const system_clock::time_point & ptime() const
original time point of the issue
Definition Issue.hpp:130
const std::string & message() const
General cause of the issue.
Definition Issue.hpp:103
const Issue * cause() const
return the cause Issue of this Issue
Definition Issue.hpp:97
virtual void write(const Issue &issue)=0
OutputStream & chained()
std::string to_string(severity s)
@ Debug
Definition Severity.hpp:26
@ Error
Definition Severity.hpp:26
@ Fatal
Definition Severity.hpp:26
@ Log
Definition Severity.hpp:26
@ Warning
Definition Severity.hpp:26
@ Information
Definition Severity.hpp:26
#define TRACE_NAME
enum severity type
Definition Severity.hpp:38

The documentation for this struct was generated from the following file: