1:- module(lsp_logs, [
    2   use_log_file_handler/1
    3]).    4
    5:- use_module(library(log4p)).    6:- use_module(library(yall)).    7
    8log4p:timestamped_log_handler(Level, Message) :-
    9   get_time(Timestamp),
   10   format_time(string(FormattedTimestamp), "%FT%T%z", Timestamp),
   11   process_id(PID),
   12   ignore(
   13     (writef('%w : %w : %w : %w\n',[FormattedTimestamp, Level, PID, Message]),
   14       flush_output)
   15   ).
   16
   17use_log_file_handler(FileName) :-
   18   retractall(log4p:log_handler(_)),
   19   open(FileName, append, LogStream,[create([default])]),  
   20   LogHandler = {LogStream}/[Level, Message] >>
   21     with_output_to(LogStream, timestamped_log_handler(Level,Message)),
   22   add_log_handler(LogHandler),
   23   at_halt(close(LogStream))