Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Tracer.hh
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file src/basic/Tracer.hh
11 /// @brief Tracer IO system
12 /// @author Sergey Lyskov
13 
14 
15 #ifndef INCLUDED_basic_Tracer_hh
16 #define INCLUDED_basic_Tracer_hh
17 
18 #include <cassert> // for assert
19 #include <memory> // for allocator, shared_ptr
20 #include <sstream> // for string, basic_strin...
21 #include <vector> // for vector
22 #include <utility/pointer/ReferenceCount.hh> // for ReferenceCount
23 #include <utility/vector1.hh> // for vector1
24 
25 #include <utility/thread/backwards_thread_local.hh> // for THREAD_LOCAL
26 
27 #ifdef WIN32
28 #include <utility/CSI_Sequence.hh>
29 #else
31 #endif
32 
33 namespace basic {
34 
35 /// @brief
36 /// Priority levels for T() and Tracer object, modeled on the log4j project and its offspring.
37 /// Priorities in Tracer are still ints so users can pass other arbitrary integer values (for now).
39  t_fatal = 0, //< The FATAL level designates very severe error events that will presumably lead the application to abort.
40  t_error = 100, //< The ERROR level designates error events that might still allow the application to continue running.
41  t_warning = 200, //< The WARN level designates potentially harmful situations.
42  t_info = 300, //< The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
43  t_debug = 400, //< The DEBUG level designates fine-grained informational events that are most useful to debug an application.
44  t_trace = 500 //< The TRACE level designates finer-grained informational events than the DEBUG level.
45 };
46 
47 
48 /// @brief Base class for Tracer, TracerProxy and UTracer objects.
49 template <class CharT, class Traits = std::char_traits<CharT> >
50 class basic_otstream : public std::basic_ostream<CharT, Traits>, public utility::pointer::ReferenceCount
51 {
52 protected: /// Inner class declaration
53 
54  /// @brief Wrapper class for std::stringbuf
55  template <class _CharT, class _Traits = std::char_traits<_CharT> >
56  class basic_tstringbuf : public std::basic_stringbuf<_CharT, _Traits> {
57  public:
59  virtual ~basic_tstringbuf() {}
60 
61  protected:
62  virtual int sync() {
63  otsream_->t_flush( this->str() ); //std::basic_stringbuf<CharT, Traits>::str() );
64  //std::basic_stringbuf<CharT, Traits>::str("");
65  this->str("");
66  return 0;
67  }
68  private:
70  };
71 
72 
73 public:
74  basic_otstream() : std::basic_ostream<CharT, Traits> ( new basic_tstringbuf<CharT, Traits> (this) ) {}
75  virtual ~basic_otstream() { delete this->rdbuf(); }
76 
77 
78  /// @brief Return true if inner string buffer is empty.
79  bool is_flushed() const {
80  basic_tstringbuf<char> * buf = dynamic_cast< basic_tstringbuf<char> * >( this->rdbuf() );
81  return buf->str().size() == 0;
82  }
83 
84 protected:
85 
86  /// @brief notification that flush function was called and inner buffer should be outputed.
87  /// This is the mechanims by which the std::basic_stringbuf base class communicates with the
88  /// Tracer and TracerProxy objects.
89  virtual void t_flush(std::string const &) { assert("basic_otstream::t_flush"); };
90 
91 private:
93 
94 
95  /// Data members
96  /// @brief inner string buffer
97  //std::basic_stringbuf<CharT, Traits> * tstringbuf_;
98 };
99 
100 
102 
103 typedef utility::pointer::shared_ptr< otstream > otstreamOP;
104 
105 
106 /// @brief data structure to store all system level options for Tracer system.
108 {
109  /// @brief system priority level
110  int level;
111 
112  /// @brief should channel name be printed during the IO?
114 
115  /// @brief should a timestamp be added to the channel name?
116  bool timestamp;
117 
118  /// @brief list of muted channels
120 
121  /// @brief list of unmuted channels
123 
124  /// @brief list of muted channels
126 };
127 
128 
129 /// @brief Class for handling user debug/warnings/errors.
130 /// Use instance of this class instead of 'std::cout' for all your regular io.
131 /// Channel argument must be related to the location of the source file. For example if you create
132 /// Tracer object in src/basic/scoring/myfile.cc,
133 /// then channel must be something like 'src.basic.scoring.myfile'
134 class Tracer : public otstream
135 {
136  /// @brief init Tracer object with given parameters. This is a helper function to be called from various constructors
137  void init(
138  std::string const & channel,
139  std::string const & channel_color,
140  std::string const & channel_name_color,
142  bool muted_by_default
143  );
144 
145 public:
146 
147  /// @brief Create Tracer object with given channel and priority
148  Tracer(
149  std::string const & channel = "",
150  TracerPriority priority = t_info,
151  bool muted_by_default = false
152  );
153 
154  /// @brief Create Tracer object with channel color, channel name color and given channel and priority
155  Tracer(
156  std::string const & channel,
157  std::string const & channel_color,
158  std::string const & channel_name_color = "",
159  TracerPriority priority = t_info,
160  bool muted_by_default = false
161  );
162 
163 
164 
165  virtual ~Tracer();
166 
167  /// @brief re-init using data from another tracer object.
168  void init( Tracer const & tr );
169 
170  /// @brief flush tracer buffer and flush buffers of all
171  /// sub-channels ie: Fatal, Error, Warning, Info, Debug, Trace
172  void flush_all_channels();
173 
174  typedef std::ostream * OstreamPointer;
175 
176  /// @brief set ios hook for final tracer stream (deafult is std::cout).
177  static OstreamPointer &final_stream();
178  static void set_new_final_stream( std::ostream *new_final_stream );
179  static void set_default_final_stream();
180 
181 
182  /// @brief set ios hook for all tracer io operation.
183  /// @param monitoring_channels_list is space separated list of channels.
184  //static void set_ios_hook(otstreamOP tr, std::string const & monitoring_channels_list);
185  static void set_ios_hook(otstreamOP tr, std::string const & monitoring_channels_list, bool raw=true);
186 
187  static std::string const & get_all_channels_string(); // PyRosetta helper function
188 
189  /// @brief Is this tracer currently visible?.
190  bool visible() const { return visible_; }
191 
192  /// @brief is this tracer visible, if it used the given priority value?
193  bool visible( int priority ) const;
194 
195  /// @brief get/set tracer priority level.
196  int priority() const { return priority_; }
197  Tracer & operator () (int priority);
198  void priority(int priority);
199 
200  std::string const & channel() const { return channel_; }
201 
202  std::string const &channel_color() { return channel_color_; }
203  void channel_color(std::string const &color) { channel_color_ = color; }
204 
205  std::string const &channel_name_color() { return channel_name_color_; }
206  void channel_name_color(std::string const &color) { channel_name_color_ = color; }
207 
208  /// @brief get/set tracer options - global options for Tracer IO.
210 
211  /// @brief global super mute flag that allow to mute all io no matter what.
212  static bool super_mute() { return super_mute_(); }
213  static void super_mute(bool f) { super_mute_() = f; }
214 
215  static void flush_all_tracers();
216 
217  /// @brief This function should be invoked after the options system has been
218  /// initialized, so that the visibility for all tracers that have so far been
219  /// constructed and have been waiting for the options system to be initialized
220  /// can now have their visibility calculated. After this function completes,
221  /// all newly-constructed Tracers will calculate their visibility in their
222  /// constructors. Visibility is no longer be calculated on a just-in-time
223  /// basis and stored in mutable data members.
224  static void calculate_tracer_visibilities();
225 
226 public: /// Inner Classes
227  /// @brief Small inner class acting as a proxy to an object that hold it.
228  class TracerProxy : public otstream // std::ostringstream //
229  {
230  public:
231  TracerProxy( Tracer & tracer, int priority, std::string const & channel );
232 
233  virtual ~TracerProxy();
234 
235  /// @brief determine the visibility of the proxy
236  void calculate_visibility();
237  /// @brief Adding this function to get around unused class data member warnings; you should
238  /// never have to worry about whether the visibility for a TracerProxy has been calculated.
240  bool visible() const { return visible_; }
241 
242  protected:
243 
244  virtual void t_flush( std::string const & );
245 
246  private:
249 
250  /// @brief We need to copy channel name here so we can generate appropriate 'warning' message
251  /// in destructor, where tracer_ object is no longer valid.
252  std::string channel_;
253 
254  /// @brief is channel visible?
255  bool visible_;
256 
257  /// @brief is channel visibility already calculated?
259  };
260 
261  /// @brief channels with predefined priority levels.
263 
264  /// @details Static objects holding various ASCII CSI codes (see utility/CSI_Sequence.hh)
268 
269 protected:
270  /// @brief overload member function.
271  virtual void t_flush(std::string const &);
272 
273 private: /// Functions
274  /// @brief copy constructor.
275  Tracer( Tracer const & tr );
276 
277 
278  /// @brief return true if channel is inside vector, some logic apply.
279  static
280  bool
281  in( utility::vector1<std::string> const &, std::string const channel, bool strict );
282 
283  /// @brief calculate channel priority with hierarchy in mind.
284  static
285  bool
288  std::string const ch,
289  bool strict,
290  int &res
291  );
292 
293  /// @brief Tracers must register themselves with the static array of all tracers so
294  /// that they can be flushed en masse if need be. This function is thread safe.
295  static
296  void
297  register_tracer( Tracer * tracer );
298 
299  template <class out_stream>
300  void prepend_channel_name( out_stream & sout, std::string const &str );
301 
302  /// @brief calcualte visibility of the current object depending of the channel name and priority.
303  void calculate_visibility();
304 
305  /// @brief Adding this function to get around unused class data member warnings; you should
306  /// never have to worry about whether the visibility for a Tracer has been calculated.
308 
309  static void calculate_visibility(
310  std::string const & channel,
311  int priority,
312  bool & visible,
313  bool & muted,
314  int & mute_level_,
315  bool muted_by_default
316  );
317 
318  /// @brief Output a message in a manner that is safe if the Tracers/output are poorly initialized.
319  static void safe_output(std::string const &);
320 
321 private: /// Data members
322 
323  /// @brief channel name
324  std::string channel_;
325 
326  /// @brief default colors for tracer output and tracer channel-name string (ie color of string such as: 'core.pose:')
328 
329  /// @brief channel output priority level
331 
332  /// @brief channel muted priority level (above which level is channel muted), calculated using user suppied -level and -levels options
334 
335  /// @brief is channel visible?
336  bool visible_;
337 
338  /// @brief is channel muted ?
339  bool muted_;
340 
341  /// @brief is channel muted by default?
343 
344  /// @brief is current printing position a begining of the line?
346 
347  /// @brief is channel visibility already calculated?
349 
350  /// static data members
351  /// @brief link to Tracer like object where all output for selecting channels should go.
352  static otstreamOP & ios_hook();
353 
354  /// @brief should the ios_hook_ the raw output?
355  static bool & ios_hook_raw_();
356 
357  /// @brief list of channels for which outout should be redirected.
359 
360  /// @brief global option collection for Tracer IO.
362 
364 
365  /// @brief global super mute flag that allow to mute all io no matter what.
366  static bool & super_mute_();
367 
368  /// @which Mpi rank is this process
369  static int mpi_rank_;
370 
371  /// @brief T is special function for assign tracer property on the static object.
372  friend Tracer & T(std::string const &, TracerPriority);
373 };
374 
375 /// @brief Simple singleton class to hold the all_tracers_ array, which
376 /// otherwise suffers from funky double-construction problems when declared
377 /// as a static data member of Tracer.
379 public:
380  static TracerManager * get_instance();
381  std::vector< Tracer * > & all_tracers();
382 
383 private:
384  TracerManager();
385 
386 private:
388  std::vector< Tracer * > all_tracers_;
389 };
390 
391 /// @brief T is special function for assign tracer property on the static object.
392 Tracer & T(std::string const & channel, TracerPriority priority=t_info);
393 
394 /// @brief Predefined Error tracer.
395 inline Tracer & Error(TracerPriority priority=t_error) { return T("Error", priority); }
396 
397 /// @brief Predefined Warning tracer.
398 inline Tracer & Warning(TracerPriority priority=t_warning) { return T("Warning", priority); }
399 
400 
401 /// Special PyRosetta friendly Tracer like buffer. Use it to capture Tracer output with set_ios_hook
402 class PyTracer : public otstream
403 {
404 public:
405  //PyTracer(void) {}
406  //virtual ~PyTracer() {}
407 
408  std::string buf() { return buf_; }
409  void buf(std::string b) { buf_ = b; }
410 
411  virtual void output_callback(std::string) = 0;
412 
413 protected:
414  /// @brief overload member function.
415  virtual void t_flush(std::string const &);
416 
417 private:
418  std::string buf_;
419 };
420 
421 
422 #ifdef NDEBUG
423 template <class T>
424 Tracer & operator <<( Tracer & TR, T const & entry ) {
425  std::ostream &t(TR);
426  if( TR.visible() ) { t << entry; }
427  return TR;
428 }
429 
430 
431 template <class T>
432 Tracer::TracerProxy & operator <<( Tracer::TracerProxy & TR, T const & entry ) {
433  std::ostream &t(TR);
434  if( TR.visible() ) { t << entry; }
435  return TR;
436 }
437 #endif
438 
439 
440 } // namespace basic
441 
442 #endif // INCLUDED_basic_tracer_hh
bool visible_
is channel visible?
Definition: Tracer.hh:255
Base class for Tracer, TracerProxy and UTracer objects.
Definition: Tracer.hh:50
int priority() const
get/set tracer priority level.
Definition: Tracer.hh:196
Class to hold all Terminal ASCII codes as static data for CSI_Sequence. Note: that on non-tty termina...
Definition: CSI_Sequence.hh:26
static utility::CSI_Sequence bgCyan
Definition: Tracer.hh:265
std::string channel_
We need to copy channel name here so we can generate appropriate 'warning' message in destructor...
Definition: Tracer.hh:252
virtual ~Tracer()
Definition: Tracer.cc:256
Terminal ASCII codes.
static utility::CSI_Sequence Cyan
Definition: Tracer.hh:265
static void safe_output(std::string const &)
Output a message in a manner that is safe if the Tracers/output are poorly initialized.
Definition: Tracer.cc:453
bool is_flushed() const
Return true if inner string buffer is empty.
Definition: Tracer.hh:79
void prepend_channel_name(out_stream &sout, std::string const &str)
Definition: Tracer.cc:517
static utility::CSI_Sequence Red
Definition: Tracer.hh:265
bool visibility_calculated_
is channel visibility already calculated?
Definition: Tracer.hh:348
static void flush_all_tracers()
Definition: Tracer.cc:168
static utility::CSI_Sequence bgBlack
Definition: Tracer.hh:265
int priority_
channel output priority level
Definition: Tracer.hh:330
virtual void t_flush(std::string const &)
overload member function.
Definition: Tracer.cc:548
utility::vector1< std::string > levels
list of muted channels
Definition: Tracer.hh:125
ReferenceCount base class – dispatch class.
int level
system priority level
Definition: Tracer.hh:110
void calculate_visibility()
determine the visibility of the proxy
Definition: Tracer.cc:142
static bool & ios_hook_raw_()
should the ios_hook_ the raw output?
Definition: Tracer.cc:96
TracerPriority
Priority levels for T() and Tracer object, modeled on the log4j project and its offspring. Priorities in Tracer are still ints so users can pass other arbitrary integer values (for now).
Definition: Tracer.hh:38
static void set_new_final_stream(std::ostream *new_final_stream)
Definition: Tracer.cc:79
static THREAD_LOCAL basic::Tracer TR("basic.execute")
static void set_default_final_stream()
Definition: Tracer.cc:84
bool timestamp
should a timestamp be added to the channel name?
Definition: Tracer.hh:116
bool visible() const
Definition: Tracer.hh:240
static void super_mute(bool f)
Definition: Tracer.hh:213
static bool in(utility::vector1< std::string > const &, std::string const channel, bool strict)
return true if channel is inside vector, some logic apply.
Definition: Tracer.cc:437
Special PyRosetta friendly Tracer like buffer. Use it to capture Tracer output with set_ios_hook...
Definition: Tracer.hh:402
static bool initial_tracers_visibility_calculated_
Definition: Tracer.hh:363
std::vector< Tracer * > & all_tracers()
Definition: Tracer.cc:611
std::string buf()
Definition: Tracer.hh:408
bool muted_
is channel muted ?
Definition: Tracer.hh:339
basic_tstringbuf(basic_otstream *ot)
Definition: Tracer.hh:58
static utility::CSI_Sequence bgRed
Definition: Tracer.hh:265
Tracer & T(std::string const &channel, TracerPriority priority)
T is special function for assign tracer property on the static object.
Definition: Tracer.cc:567
TracerProxy Warning
Definition: Tracer.hh:262
static utility::vector1< std::string > monitoring_list_
list of channels for which outout should be redirected.
Definition: Tracer.hh:358
TracerProxy Info
Definition: Tracer.hh:262
void flush_all_channels()
flush tracer buffer and flush buffers of all sub-channels ie: Fatal, Error, Warning, Info, Debug, Trace
Definition: Tracer.cc:313
bool visibility_calculated() const
Adding this function to get around unused class data member warnings; you should never have to worry ...
Definition: Tracer.hh:239
static bool & super_mute_()
global super mute flag that allow to mute all io no matter what.
Definition: Tracer.cc:114
File to provide backwards compatibility for the thread_local keyword.
TracerProxy Trace
Definition: Tracer.hh:262
std::string channel_name_color_
Definition: Tracer.hh:327
Base class for reference-counted polymorphic classes.
TracerProxy(Tracer &tracer, int priority, std::string const &channel)
Definition: Tracer.cc:128
virtual void t_flush(std::string const &)
Flush inner buffer: send it to bound Tracer object, and clean it.
Definition: Tracer.cc:151
static utility::CSI_Sequence Underline
Definition: Tracer.hh:265
std::string const & channel_color()
Definition: Tracer.hh:202
Tracer & Error(TracerPriority priority=t_error)
Predefined Error tracer.
Definition: Tracer.hh:395
void init(std::string const &channel, std::string const &channel_color, std::string const &channel_name_color, TracerPriority priority, bool muted_by_default)
init Tracer object with given parameters. This is a helper function to be called from various constru...
Definition: Tracer.cc:228
static utility::CSI_Sequence White
Definition: Tracer.hh:265
std::string const & channel_name_color()
Definition: Tracer.hh:205
static utility::CSI_Sequence Reset
Definition: Tracer.hh:265
static otstreamOP & ios_hook()
link to Tracer like object where all output for selecting channels should go.
Definition: Tracer.cc:90
static bool super_mute()
global super mute flag that allow to mute all io no matter what.
Definition: Tracer.hh:212
bool visible() const
Is this tracer currently visible?.
Definition: Tracer.hh:190
TracerProxy Error
Definition: Tracer.hh:262
static utility::CSI_Sequence Magenta
Definition: Tracer.hh:265
std::string const & channel() const
Definition: Tracer.hh:200
static utility::CSI_Sequence Yellow
Definition: Tracer.hh:265
Terminal ASCII codes.
static utility::CSI_Sequence bgBlue
Definition: Tracer.hh:265
utility::pointer::shared_ptr< otstream > otstreamOP
Definition: Tracer.hh:103
static utility::CSI_Sequence Bold
Definition: Tracer.hh:265
void buf(std::string b)
Definition: Tracer.hh:409
static OstreamPointer & final_stream()
set ios hook for final tracer stream (deafult is std::cout).
Definition: Tracer.cc:73
data structure to store all system level options for Tracer system.
Definition: Tracer.hh:107
Tracer(std::string const &channel="", TracerPriority priority=t_info, bool muted_by_default=false)
Create Tracer object with given channel and priority.
Definition: Tracer.cc:205
utility::vector1< std::string > muted
list of muted channels
Definition: Tracer.hh:119
Small inner class acting as a proxy to an object that hold it.
Definition: Tracer.hh:228
static utility::CSI_Sequence Blue
Definition: Tracer.hh:265
Tracer & Warning(TracerPriority priority=t_warning)
Predefined Warning tracer.
Definition: Tracer.hh:398
bool print_channel_name
should channel name be printed during the IO?
Definition: Tracer.hh:113
static void register_tracer(Tracer *tracer)
Tracers must register themselves with the static array of all tracers so that they can be flushed en ...
bool begining_of_the_line_
is current printing position a begining of the line?
Definition: Tracer.hh:345
static utility::CSI_Sequence bgWhite
Definition: Tracer.hh:265
static utility::CSI_Sequence bgYellow
Definition: Tracer.hh:265
static TracerManager * instance_
Definition: Tracer.hh:387
static TracerManager * get_instance()
Definition: Tracer.cc:603
void channel_color(std::string const &color)
Definition: Tracer.hh:203
std::string channel_color_
default colors for tracer output and tracer channel-name string (ie color of string such as: 'core...
Definition: Tracer.hh:327
static int mpi_rank_
Mpi rank is this process
Definition: Tracer.hh:369
std::ostream & operator<<(std::ostream &out, const JobOptions &job_options)
This output-operator function invokes the JobOption's show() method.
Definition: JobOptions.cc:152
static utility::CSI_Sequence Black
Definition: Tracer.hh:265
void channel_name_color(std::string const &color)
Definition: Tracer.hh:206
virtual ~basic_otstream()
Definition: Tracer.hh:75
vector1: std::vector with 1-based indexing
std::ostream * OstreamPointer
Definition: Tracer.hh:174
void calculate_visibility()
calcualte visibility of the current object depending of the channel name and priority.
Definition: Tracer.cc:355
static void set_ios_hook(otstreamOP tr, std::string const &monitoring_channels_list, bool raw=true)
set ios hook for all tracer io operation.
Definition: Tracer.cc:595
static std::string const & get_all_channels_string()
Definition: Tracer.cc:106
virtual void t_flush(std::string const &)
overload member function.
Definition: Tracer.cc:617
static bool calculate_tracer_level(utility::vector1< std::string > const &v, std::string const ch, bool strict, int &res)
calculate channel priority with hierarchy in mind.
Definition: Tracer.cc:464
NumericTraits< Type > Traits
Definition: constants.cc:30
Tracer & operator()(int priority)
Definition: Tracer.cc:333
Class for handling user debug/warnings/errors. Use instance of this class instead of 'std::cout' for ...
Definition: Tracer.hh:134
TracerProxy Fatal
channels with predefined priority levels.
Definition: Tracer.hh:262
static utility::CSI_Sequence Green
Definition: Tracer.hh:265
friend Tracer & T(std::string const &, TracerPriority)
T is special function for assign tracer property on the static object.
Definition: Tracer.cc:567
virtual void t_flush(std::string const &)
notification that flush function was called and inner buffer should be outputed. This is the mechanim...
Definition: Tracer.hh:89
utility::vector1< std::string > unmuted
list of unmuted channels
Definition: Tracer.hh:122
std::string channel_
Data members.
Definition: Tracer.hh:324
Simple singleton class to hold the all_tracers_ array, which otherwise suffers from funky double-cons...
Definition: Tracer.hh:378
bool visibility_calculated() const
Adding this function to get around unused class data member warnings; you should never have to worry ...
Definition: Tracer.hh:307
THREAD_LOCAL basic::Tracer tr("struc_set_fragment_picker")
static TracerOptions tracer_options_
global option collection for Tracer IO.
Definition: Tracer.hh:361
static utility::CSI_Sequence bgGreen
Definition: Tracer.hh:265
std::vector< Tracer * > all_tracers_
Definition: Tracer.hh:388
bool visible_
is channel visible?
Definition: Tracer.hh:336
static void calculate_tracer_visibilities()
This function should be invoked after the options system has been initialized, so that the visibility...
Definition: Tracer.cc:185
basic_otstream< char > otstream
Definition: Tracer.hh:101
bool visibility_calculated_
is channel visibility already calculated?
Definition: Tracer.hh:258
static utility::CSI_Sequence bgMagenta
Definition: Tracer.hh:265
TracerProxy Debug
Definition: Tracer.hh:262
bool muted_by_default_
is channel muted by default?
Definition: Tracer.hh:342
Inner class declaration.
Definition: Tracer.hh:56
virtual void output_callback(std::string)=0
std::string buf_
Definition: Tracer.hh:418
static TracerOptions & tracer_options()
get/set tracer options - global options for Tracer IO.
Definition: Tracer.hh:209
int mute_level_
channel muted priority level (above which level is channel muted), calculated using user suppied -lev...
Definition: Tracer.hh:333