(* Copyright (C) 2002, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science * Department, University of Bologna, Italy. * * HELM is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * HELM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HELM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, * http://cs.unibo.it/helm/. *) open Printf;; type priority = [ `Emerg | `Alert | `Crit | `Err | `Warning | `Notice | `Info | `Debug ] let int_of_priority = function | `Emerg -> 0 | `Alert -> 1 | `Crit -> 2 | `Err -> 3 | `Warning -> 4 | `Notice -> 5 | `Info -> 6 | `Debug -> 7 let string_of_priority = function | `Emerg -> "EMERGENCY" | `Alert -> "ALERT" | `Crit -> "CRITICAL" | `Err -> "ERROR" | `Warning -> "WARNING" | `Notice -> "NOTICE" | `Info -> "INFO" | `Debug -> "DEBUG" class sysLogger ?(level: priority = `Notice) () = object (self) inherit Uwobo_common.threadSafe initializer print_endline (sprintf "Logger started with level %s" (string_of_priority level)) val level_no = int_of_priority level val mutable enabled = false method enable = self#doCritical (lazy (enabled <- true)) method disable = self#doCritical (lazy (enabled <- false)) method log (prio: priority) msg = self#doCritical (lazy ( if enabled && (int_of_priority prio <= level_no) then prerr_endline (sprintf ("%s: %s") (string_of_priority prio) msg) )) end (** non thread safe, a processingLogger is usually instantied locally for each thread *) class processingLogger () = object val mutable log_lines: string list = [] method log msg = log_lines <- msg :: log_lines method asText = String.concat "\n" (List.rev log_lines) method asHtml = sprintf "\n%s\n" (String.concat "
\n" (List.map (Netencoding.Url.encode ~plus:false) (List.rev log_lines))) end