IMP  2.1.0
The Integrative Modeling Platform
base/log.h
Go to the documentation of this file.
1 /**
2  * \file IMP/base/log.h
3  * \brief Logging and error reporting support.
4  *
5  * Copyright 2007-2013 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPBASE_LOG_H
10 #define IMPBASE_LOG_H
11 
12 #include <IMP/base/base_config.h>
13 #include "enums.h"
14 #include "WarningContext.h"
15 #include "internal/static.h"
16 #include <iostream>
17 #include <cstdlib>
18 #include <string>
19 #include <sstream>
20 #if IMP_BASE_HAS_LOG4CXX
21 #include <log4cxx/logger.h>
22 #endif
23 
24 IMPBASE_BEGIN_NAMESPACE
25 
26 /** \name Logging
27  \anchor log
28  \imp provides tools for controlling the amount of log output produced
29  and directing it to the terminal or a file. Only log messages tagged
30  with a lower level than the current LogLevel are emitted. In addition
31  to a global log level (get_log_level(), set_log_level()), each
32  IMP::Object has an internal log level (IMP::Object::get_log_level(),
33  IMP::Object::set_log_level()) which is used when executing code on
34  that object.
35 
36  Logging is provided by IMP/base/log.h.
37 
38  People implementing IMP::Object classes should also see IMP_OBJECT_LOG()
39  and IMP::SetLogState.
40 
41  All logging is disabled when \imp is built using \c build='fast'.
42  @{
43  */
44 #ifndef IMP_DOXYGEN
45 #if !IMP_BASE_HAS_LOG4CXX
46 //! Push a new log context onto the stack
47 /** A log context is, eg, a function name.
48  */
49 IMPBASEEXPORT void push_log_context(const char *functionname,
50  const void *object);
51 
52 //! pop the top log context
53 IMPBASEEXPORT void pop_log_context();
54 
55 //! Write a string to the log
56 IMPBASEEXPORT void add_to_log(std::string to_write);
57 #endif
58 #endif
59 
60 //! Write a string to the log, for python
61 IMPBASEEXPORT void add_to_log(LogLevel level, std::string to_write);
62 
63 //! Set the current global log level
64 /** Set the current global log level
65 
66  @note may be overriden by set_log_level of specific objects that inherit
67  from IMP::base::Object
68  @note this global method should not, currently, be used directly during
69  kernel::Model::evaluate() calls.
70 
71  \see get_log_level()
72  \see IMP::base::Object::set_log_level()
73 */
74 IMPBASEEXPORT void set_log_level(LogLevel l);
75 
76 //! Set whether log messages are tagged with the current log time
77 IMPBASEEXPORT void set_log_timer(bool tb);
78 
79 //! Reset the log timer
80 IMPBASEEXPORT void reset_log_timer();
81 
82 //! Get the currently active global log level
83 /** Get the currently active global log level
84 
85  @note This may not always match the value passed to set_log_level()
86  as objects can temporarily override the global level
87  while they are evaluating.
88 
89  \see set_log_level()
90  \see IMP::base::Object::set_log_level()
91 
92  */
93 inline LogLevel get_log_level() { return LogLevel(internal::log_level); }
94 
95 #if IMP_BASE_HAS_LOG4CXX
96 inline log4cxx::LoggerPtr get_logger() {
97  static log4cxx::LoggerPtr ret = log4cxx::Logger::getLogger("IMP");
98  return ret;
99 }
100 #else
101 #if !defined(IMP_DOXYGEN) && !defined(SWIG)
102 inline bool get_is_log_output(LogLevel l) { return l <= get_log_level(); }
103 #endif
104 #endif
105 
106 /** @} */
107 
108 /** \name Create a progress bar in the terminal
109 
110  @{
111  */
112 /** Set up the progress bar with the passed description.
113 
114  See IMP_PROGRESS_DISPLAY().
115 */
116 IMPBASEEXPORT void set_progress_display(std::string description,
117  unsigned int steps);
118 /** Set the current progress. When it equals the number of steps,
119  the bar is done.*/
120 IMPBASEEXPORT void add_to_progress_display(unsigned int step = 1);
121 
122 /** @} */
123 
124 IMPBASE_END_NAMESPACE
125 
126 #endif /* IMPBASE_LOG_H */
void set_log_timer(bool tb)
Set whether log messages are tagged with the current log time.
LogLevel
The log levels supported by IMP.
Definition: base/enums.h:18
void reset_log_timer()
Reset the log timer.
void set_log_level(LogLevel l)
Set the current global log level.
void set_progress_display(std::string description, unsigned int steps)
LogLevel get_log_level()
Get the currently active global log level.
Definition: base/log.h:93
void add_to_log(LogLevel level, std::string to_write)
Write a string to the log, for python.
Basic types used by IMP.
void add_to_progress_display(unsigned int step=1)
Logging and error reporting support.