| 1 | :- module(plspec_logger, [log/3, log/2, set_loglevel/1, possible_loglevel/1]). | |
| 2 | ||
| 3 | possible_loglevel(info). | |
| 4 | possible_loglevel(warning). | |
| 5 | possible_loglevel(error). | |
| 6 | possible_loglevel(debug). | |
| 7 | possible_loglevel(nothing). | |
| 8 | ||
| 9 | :- dynamic loglevel/1. | |
| 10 | loglevel(error). | |
| 11 | loglevel(warning). | |
| 12 | ||
| 13 | set_loglevel(X) :- | |
| 14 | retractall(loglevel(_)), | |
| 15 | print(set_loglevel(X)),nl, | |
| 16 | set_loglevel_aux(X). | |
| 17 | ||
| 18 | set_loglevel_aux(debug) :- | |
| 19 | assert(loglevel(debug)), | |
| 20 | assert(loglevel(warning)), | |
| 21 | assert(loglevel(error)), | |
| 22 | assert(loglevel(info)). | |
| 23 | set_loglevel_aux(info) :- | |
| 24 | assert(loglevel(info)), | |
| 25 | assert(loglevel(error)), | |
| 26 | assert(loglevel(warning)). | |
| 27 | set_loglevel_aux(warning) :- | |
| 28 | assert(loglevel(error)), | |
| 29 | assert(loglevel(warning)). | |
| 30 | set_loglevel_aux(error) :- | |
| 31 | assert(loglevel(error)). | |
| 32 | set_loglevel_aux(nothing). | |
| 33 | ||
| 34 | log_stream(error,R,Col) :- !,R=user_error,Col=[bold,red]. | |
| 35 | log_stream(_,user_output,[blue]). | |
| 36 | ||
| 37 | :- load_files(library(system), [when(compile_time), imports([environ/2])]). | |
| 38 | :- if(environ(prob_safe_mode,true)). | |
| 39 | :- use_module(probsrc(tools_printing),[format_with_colour/4]). | |
| 40 | :- else. | |
| 41 | format_with_colour(Stream,_,Str,Args) :- format(Stream,Str,Args). | |
| 42 | :- endif. | |
| 43 | ||
| 44 | log(X, Format, Args) :- | |
| 45 | (loglevel(X) | |
| 46 | -> log_stream(X,Stream,Colour), | |
| 47 | format(Stream,'~w ~w~`.t~20|',[plspec, X]), | |
| 48 | format_with_colour(Stream,Colour,Format,Args), nl(Stream) | |
| 49 | ; possible_loglevel(X) -> true | |
| 50 | ; format(user_error,'plspec internal error: ~w is not a valid loglevel!', [X]) | |
| 51 | ). | |
| 52 | ||
| 53 | log(X, Format) :- | |
| 54 | log(X, Format, []). |