50 std::map<std::string, std::string>
colour;
59 colour[
"BLACK"] =
"\033[30m";
61 colour[
"GREEN"] =
"\033[32m";
62 colour[
"YELLOW"] =
"\033[33m";
63 colour[
"BLUE"] =
"\033[34m";
64 colour[
"PURPLE"] =
"\033[35m";
65 colour[
"CYAN"] =
"\033[36m";
66 colour[
"WHITE"] =
"\033[37m";
67 colour[
"NORMAL"] =
"\033[0;39m";
133 std::ios_base::fmtflags f(stream.flags());
135 stream <<
log.background()<< std::left;
136 if (
log.topWidth > 0)
138 stream << std::setw(
log.topWidth);
140 stream <<
log.topName <<
log.background()<<
" : ";
143 if (
log.chanWidth > 0)
145 stream << std::setw(
log.chanWidth);
147 stream <<
log.name <<
log.background() <<
" : ";
148 if (
log.timestamp ) {
149 log.StopWatch->Stop();
152 if (
log.timing_mode==1 )
log.StopWatch->Reset();
153 log.StopWatch->Start();
154 stream <<
log.evidence()
155 << now <<
log.background() <<
" : " ;
158 stream << std::right;
171 Logger(
"Grid", on, nm, col_class, col_key){};
192std::string
demangle(
const char* name) ;
194template<
typename... Args>
195inline std::string
sjoin(Args&&... args)
noexcept {
196 std::ostringstream msg;
197 (msg << ... << args);
202template <
typename... Args>
204 std::string msg =
sjoin(std::forward<Args>(args)...);
209template <
typename... Args>
211 std::string msg =
sjoin(std::forward<Args>(args)...);
212 std::cout <<
"\033[33m" <<
GridLogWarning << msg <<
"\033[0m" << std::endl;
216template <
typename... Args>
218 std::string msg =
sjoin(std::forward<Args>(args)...);
219 std::cout <<
"\033[31m" <<
GridLogError << msg <<
"\033[0m" << std::endl;
223template <
typename... Args>
225 std::string msg =
sjoin(std::forward<Args>(args)...);
226 std::cout <<
"\033[32m" <<
GridLogMessage << msg <<
"\033[0m" << std::endl;
229#define _NBACKTRACE (256)
232#define BACKTRACEFILE() { \
234 std::sprintf(string,"backtrace.%d",CartesianCommunicator::RankWorld()); \
235 std::FILE * fp = std::fopen(string,"w"); \
241#ifdef HAVE_EXECINFO_H
242#define BACKTRACEFP(fp) { \
243 int symbols = backtrace (Grid_backtrace_buffer,_NBACKTRACE); \
244 char **strings = backtrace_symbols(Grid_backtrace_buffer,symbols); \
245 for (int i = 0; i < symbols; i++){ \
246 std::fprintf (fp,"BackTrace Strings: %d %s\n",i, demangle(strings[i]).c_str()); std::fflush(fp); \
250#define BACKTRACEFP(fp) { \
251 std::fprintf (fp,"BT %d %lx\n",0, __builtin_return_address(0)); std::fflush(fp); \
252 std::fprintf (fp,"BT %d %lx\n",1, __builtin_return_address(1)); std::fflush(fp); \
253 std::fprintf (fp,"BT %d %lx\n",2, __builtin_return_address(2)); std::fflush(fp); \
254 std::fprintf (fp,"BT %d %lx\n",3, __builtin_return_address(3)); std::fflush(fp); \
258#define BACKTRACE() BACKTRACEFP(stdout)
accelerator_inline Grid_simd< S, V > log(const Grid_simd< S, V > &r)
GridLogger GridLogIterative(1, "Iterative", GridLogColours, "BLUE")
GridLogger GridLogError(1, "Error", GridLogColours, "RED")
GridLogger GridLogIRL(1, "IRL", GridLogColours, "NORMAL")
GridLogger GridLogPerformance(1, "Performance", GridLogColours, "GREEN")
GridLogger GridLogDebug(1, "Debug", GridLogColours, "PURPLE")
GridLogger GridLogMG(1, "MG", GridLogColours, "NORMAL")
GridLogger GridLogIntegrator(1, "Integrator", GridLogColours, "BLUE")
GridLogger GridLogHMC(1, "HMC", GridLogColours, "BLUE")
GridLogger GridLogMemory(1, "Memory", GridLogColours, "NORMAL")
GridLogger GridLogSolver(1, "Solver", GridLogColours, "NORMAL")
GridLogger GridLogTracing(1, "Tracing", GridLogColours, "NORMAL")
Colours GridLogColours(0)
GridLogger GridLogDslash(1, "Dslash", GridLogColours, "BLUE")
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
GridLogger GridLogWarning(1, "Warning", GridLogColours, "YELLOW")
std::string sjoin(Args &&... args) noexcept
void GridLogConfigure(std::vector< std::string > &logstreams)
void Grid_pass(Args &&... args)
make pass messages work like python print
void * Grid_backtrace_buffer[_NBACKTRACE]
std::string demangle(const char *name)
void Grid_error(Args &&... args)
make error messages work like python print
void Grid_warn(Args &&... args)
make warning messages work like python print
void Grid_log(Args &&... args)
make log messages work like python print
#define NAMESPACE_BEGIN(A)
std::chrono::microseconds GridTime
void Active(bool activate)
std::map< std::string, std::string > colour
Colours(bool activate=false)
GridLogger(int on, std::string nm, Colours &col_class, std::string col_key="NORMAL")
static std::ostream devnull
void setChanWidth(const int w)
GridStopWatch * StopWatch
friend std::ostream & operator<<(std::ostream &stream, Logger &log)
void setTopWidth(const int w)
Logger(std::string topNm, int on, std::string nm, Colours &col_class, std::string col)
GridStopWatch LocalStopWatch
static GridStopWatch GlobalStopWatch
static void Timestamp(int on)