zeratax / yacx

Yet Another CudaExecutor - wrapper to easily compile and execute cuda kernels
https://zeratax.github.io/yacx
MIT License
8 stars 4 forks source link

[WIP] Logger argparser #146

Closed zeratax closed 4 years ago

zeratax commented 4 years ago

Adds a cute helper function to set the log level with e.g. --log=DEBUG -f=yacx.log for the command line

to enable this you would just do something like this:

int main(int argc, char const *const *const argv) {
  yacx::handle_logging_args(argc, argv);
  // kernel.launch() etc..
}

And it will output errors in colors which is solved pretty ugly, but idk how else to do it in c++ https://github.com/ZerataX/yacx/blob/9610f7cb245a4b41b6ea8bf06050b5d179bd480c/include/yacx/Logger.hpp#L24-L36

Also not sure what will happen on windows, I hope this check is enough https://github.com/ZerataX/yacx/blob/9610f7cb245a4b41b6ea8bf06050b5d179bd480c/include/yacx/Colors.hpp#L6

Please comment if these options make sense to you like this. e.g. maybe better --verbose? or -f defaults to yacx.log?

TODO:

LukasSiefke commented 4 years ago

Logger im JNI (mit Tests) funktioniert bereits. Da kann man dann so was wie Logger.setLogLevel(LogLevel.ERROR); machen. Das endl ist in Zeile 170. Ich würde es aber auch logischer finden, wenn es nach Zeile 173 kommt. agamemnon scheint momentan wirklich offline zu sein.Der Palma funktioniert aber noch. Ich würde so ein default log-file ganz gut finden.

zeratax commented 4 years ago

Das endl ist in Zeile 170

Denke du meinst Z. 118? ja schon klar, aber das kommt doch hier jetzt nur wenn ein neuer log aufruf kommt, der letzte z.B. bekommt doch hier nie ein endl, oder? den stream nicht schlieszen kann ja schon manchmal doof sein. vorher hatte ich das ja einfach im destruktor, aber in ner static klasse geht das ja wahrscheinlich nicht...

LukasSiefke commented 4 years ago

Stimmt das letzte was geloggt wird bekommt dann kein Zeilenumbruch mehr und wird nicht mehr ausgeprintet. Welcher Stream wird denn nicht geschlossen?

zeratax commented 4 years ago

eh nicht nicht geschlossen, aber wird halt nicht geflushed

[std::endl] Inserts a newline character into the output sequence os and flushes it as if by calling os.put(os.widen('\n')) followed by os.flush().

LukasSiefke commented 4 years ago

Aber wenn das das Programm beendet ist wird der Stream ja geschlossen und dabei auch geflusht. Also müsste das letzte Log-Statement doch noch geprintet werden (zumindest im Logfile) oder? Nur halt etwas zeitverzögert. Aber es ist wahrscheinlich besser das endl ein paar Zeilen nach hinten zu verschieben, sodass das sofort geflusht wird

zeratax commented 4 years ago

Ja ich frag mich halt nur was gerade passiert wenn jetzt irg was anderes auf std::cout kommt. das muss dann doch auch mit \n beginnen. Und es wird doch immer dann erst was ausgegeben, wenn das naechste mal geflushed wird oder? performance maeszig ist staendiges flushen aufjeden fall nicht so gut, aber eig auch kein riesigen problem fuer so single thread wie bei uns.

wahrscheinlich wie du sagst halt einfach ein paar Zeilen nach unten bewegen

Oh und als erinnerung an mich: std::pair<const char *, const char *> durch make_pair ersetzen

LukasSiefke commented 4 years ago

screenshot-254f34d6

So sehen die Farben aus

zeratax commented 4 years ago

ganz okay? schade, dass die eig Message keine Farbe hat :/

zeratax commented 4 years ago

hmm ja ich probier mal noch etwas rum mit den colors console output

Edit: glaube ich lasse die farben so. @visualJames vielleichtw willst du die ja ändern, oder die für die exceptions maybe übernehmen, also zumindest das rot lol.