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