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, []). |