nestlog: streamlining + comments + markdown
This commit is contained in:
parent
5339e9b124
commit
beeb927082
6 changed files with 84 additions and 53 deletions
81
README.md
81
README.md
|
|
@ -33,65 +33,64 @@ output:
|
|||
|
||||
#include "nestlog/scope.hpp"
|
||||
|
||||
using namespace xo;
|
||||
|
||||
int
|
||||
fib(int n) {
|
||||
XO_SCOPE(log);
|
||||
scope log(XO_ENTER0(info), ":n ", n);
|
||||
|
||||
int retval = 1;
|
||||
|
||||
if (n >= 2) {
|
||||
log(":n ", n);
|
||||
retval = fib(n - 1) + fib(n - 2);
|
||||
log && log(":n ", n);
|
||||
}
|
||||
|
||||
log(":n ", n, " -> :retval ", retval);
|
||||
log.end_scope("<- :retval ", retval);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char ** argv) {
|
||||
XO_SCOPE(log);
|
||||
log_config::min_log_level = xo::log_level::info;
|
||||
log_config::indent_width = 4;
|
||||
|
||||
int n = 4;
|
||||
int fn = fib(n);
|
||||
int n = 4;
|
||||
|
||||
log(":n ", n, " :fib(n) ", fn);
|
||||
scope log(XO_ENTER0(info), ":n ", 4);
|
||||
|
||||
int fn = fib(n);
|
||||
|
||||
log && log(":n ", n);
|
||||
log && log("<- :fib(n) ", fn);
|
||||
}
|
||||
|
||||
output:
|
||||
|
||||
+main
|
||||
+fib
|
||||
:n 4
|
||||
+fib
|
||||
:n 3
|
||||
+fib
|
||||
:n 2
|
||||
+fib
|
||||
:n 1 -> :retval 1
|
||||
-fib
|
||||
+fib
|
||||
:n 0 -> :retval 1
|
||||
-fib
|
||||
:n 2 -> :retval 2
|
||||
-fib
|
||||
+fib
|
||||
:n 1 -> :retval 1
|
||||
-fib
|
||||
:n 3 -> :retval 3
|
||||
-fib
|
||||
+fib
|
||||
:n 2
|
||||
+fib
|
||||
:n 1 -> :retval 1
|
||||
-fib
|
||||
+fib
|
||||
:n 0 -> :retval 1
|
||||
-fib
|
||||
:n 2 -> :retval 2
|
||||
-fib
|
||||
:n 4 -> :retval 5
|
||||
-fib
|
||||
:n 4 :fib(n) 5
|
||||
-main
|
||||
20:13:12.992909 +(0) main :n 4 [ex2.cpp:30]
|
||||
20:13:12.992968 +(1) fib :n 4 [ex2.cpp:9]
|
||||
20:13:12.992986 +(2) fib :n 3 [ex2.cpp:9]
|
||||
20:13:12.992999 +(3) fib :n 2 [ex2.cpp:9]
|
||||
20:13:12.993002 +(4) fib :n 1 [ex2.cpp:9]
|
||||
20:13:12.993012 -(4) fib <- :retval 1
|
||||
20:13:12.993022 +(4) fib :n 0 [ex2.cpp:9]
|
||||
20:13:12.993032 -(4) fib <- :retval 1
|
||||
:n 2
|
||||
20:13:12.993049 -(3) fib <- :retval 2
|
||||
20:13:12.993059 +(3) fib :n 1 [ex2.cpp:9]
|
||||
20:13:12.993069 -(3) fib <- :retval 1
|
||||
:n 3
|
||||
20:13:12.993085 -(2) fib <- :retval 3
|
||||
20:13:12.993095 +(2) fib :n 2 [ex2.cpp:9]
|
||||
20:13:12.993105 +(3) fib :n 1 [ex2.cpp:9]
|
||||
20:13:12.993115 -(3) fib <- :retval 1
|
||||
20:13:12.993124 +(3) fib :n 0 [ex2.cpp:9]
|
||||
20:13:12.993134 -(3) fib <- :retval 1
|
||||
:n 2
|
||||
20:13:12.993145 -(2) fib <- :retval 2
|
||||
:n 4
|
||||
20:13:12.993155 -(1) fib <- :retval 5
|
||||
:n 4
|
||||
<- :fib(n) 5
|
||||
20:13:12.993172 -(0) main
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ fib(int n) {
|
|||
|
||||
if (n >= 2) {
|
||||
retval = fib(n - 1) + fib(n - 2);
|
||||
log(":n ", n);
|
||||
log && log(":n ", n);
|
||||
}
|
||||
|
||||
log.end_scope("<- :retval ", retval);
|
||||
|
|
@ -22,6 +22,7 @@ fib(int n) {
|
|||
|
||||
int
|
||||
main(int argc, char ** argv) {
|
||||
log_config::min_log_level = xo::log_level::info;
|
||||
log_config::indent_width = 4;
|
||||
|
||||
int n = 4;
|
||||
|
|
@ -30,6 +31,6 @@ main(int argc, char ** argv) {
|
|||
|
||||
int fn = fib(n);
|
||||
|
||||
log(":n ", n);
|
||||
log("<- :fib(n) ", fn);
|
||||
log && log(":n ", n);
|
||||
log && log("<- :fib(n) ", fn);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,14 +26,14 @@ main(int argc, char ** argv) {
|
|||
log_config::time_local_flag = true;
|
||||
log_config::style = FS_Streamlined;
|
||||
log_config::indent_width = 4;
|
||||
log_config::max_indent_width = 14;
|
||||
log_config::location_tab = 80;
|
||||
log_config::max_indent_width = 30;
|
||||
log_config::location_tab = 100;
|
||||
log_config::encoding = CE_Xterm;
|
||||
log_config::function_entry_color = 69;
|
||||
log_config::function_exit_color = 70;
|
||||
log_config::code_location_color = 166;
|
||||
|
||||
int n = 4;
|
||||
int n = 9;
|
||||
|
||||
scope log(XO_ENTER0(info), ":n ", 4);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ namespace xo {
|
|||
void print(std::ostream & os) const {
|
||||
if ((flags_ & CF_ColorOn) && (color_ > 0)) {
|
||||
switch(encoding_) {
|
||||
case CE_None:
|
||||
break;
|
||||
case CE_Ansi:
|
||||
os << "\033[" << color_ << "m";
|
||||
break;
|
||||
|
|
@ -45,8 +47,16 @@ namespace xo {
|
|||
if (flags_ & CF_Contents)
|
||||
os << contents_;
|
||||
|
||||
if ((flags_ & CF_ColorOff) && (color_ > 0))
|
||||
os << "\033[0m";
|
||||
if ((flags_ & CF_ColorOff) && (color_ > 0)) {
|
||||
switch(encoding_) {
|
||||
case CE_None:
|
||||
break;
|
||||
case CE_Ansi:
|
||||
case CE_Xterm:
|
||||
os << "\033[0m";
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /*print*/
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -5,13 +5,28 @@
|
|||
namespace xo {
|
||||
enum class log_level : std::uint32_t {
|
||||
/* control log message severity
|
||||
* silent > severe > error > warning > info > chatty
|
||||
* silent > always > severe > error > warning > info > chatty > never
|
||||
*
|
||||
* never:
|
||||
* used internally e.g. by XO_ENTER1()
|
||||
* a log message with this severity will never be printed
|
||||
*
|
||||
* always:
|
||||
* use with XO_ENTER1():
|
||||
* scope log(XO_ENTER1(always, mydebug_flag));
|
||||
* to log message whenever mydebug_flag is true (for any .min_log_level except silent)
|
||||
*
|
||||
* silent:
|
||||
* use in log_config to suppress all log messages
|
||||
*/
|
||||
never,
|
||||
verbose,
|
||||
chatty,
|
||||
info,
|
||||
warning,
|
||||
error,
|
||||
severe,
|
||||
always,
|
||||
silent,
|
||||
|
||||
default_level = error
|
||||
|
|
|
|||
|
|
@ -17,7 +17,13 @@ namespace xo {
|
|||
class state_impl;
|
||||
|
||||
# define XO_ENTER0(lvl) xo::scope_setup(xo::log_level::lvl, xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__)
|
||||
# define XO_ENTER1(lvl, debug_flag) xo::scope_setup(xo::log_level::lvl, xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__, debug_flag)
|
||||
# define XO_ENTER1(lvl, debug_flag) XO_ENTER2(lvl, debug_flag, __PRETTY_FUNCTION__)
|
||||
# define XO_ENTER2(lvl, debug_flag, name1) xo::scope_setup((debug_flag ? xo::log_level::lvl : xo::log_level::never), xo::log_config::style, name1, __FILE__, __LINE__)
|
||||
|
||||
# define XO_DEBUG(debug_flag) XO_ENTER1(always, debug_flag)
|
||||
# define XO_DEBUG2(debug_flag, name1) XO_ENTER2(always, debug_flag, name1)
|
||||
|
||||
# define XO_LITERAL(lvl, name1, name2) xo::scope_setup(xo::log_level::lvl, FS_Literal, name1, name2, __FILE__, __LINE__)
|
||||
|
||||
//# define XO_SSETUP0() xo::scope_setup(__FUNCTION__)
|
||||
//# define XO_SSETUP0(lvl) xo::scope_setup(xo::log_level::lvl, xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__)
|
||||
|
|
@ -27,8 +33,8 @@ namespace xo {
|
|||
/* establish scope using current function name */
|
||||
# define XO_SCOPE(name, lvl) xo::scope name(xo::scope_setup(xo::log_level::lvl, xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__))
|
||||
/* like XO_SCOPE(name), but also set enabled flag */
|
||||
# define XO_SCOPE2(name, debug_flag) xo::scope name(xo::scope_setup(xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__, debug_flag))
|
||||
# define XO_SCOPE_DISABLED(name) xo::scope name(xo::scope_setup(xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__, false))
|
||||
//# define XO_SCOPE2(name, debug_flag) xo::scope name(xo::scope_setup(xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__, debug_flag))
|
||||
# define XO_SCOPE_DISABLED(name) xo::scope name(xo::scope_setup(xo::log_level::never, xo::log_config::style, __PRETTY_FUNCTION__, __FILE__, __LINE__))
|
||||
# define XO_STUB() { XO_SCOPE(logr); logr.log("STUB"); }
|
||||
|
||||
/* convenience class for basic_scope<..> construction (see below).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue