nestlog: streamlining + comments + markdown

This commit is contained in:
Roland Conybeare 2023-09-15 20:15:58 -04:00
commit beeb927082
6 changed files with 84 additions and 53 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -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);

View file

@ -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:

View file

@ -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

View file

@ -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).