mirror of https://git.codelabs.ch/alog.git
183 lines
6.4 KiB
Ada
183 lines
6.4 KiB
Ada
--
|
|
-- Copyright (c) 2008-2012,
|
|
-- Reto Buerki, Adrian-Ken Rueegsegger
|
|
--
|
|
-- This file is part of Alog.
|
|
--
|
|
-- Alog is free software; you can redistribute it and/or modify
|
|
-- it under the terms of the GNU Lesser General Public License as published
|
|
-- by the Free Software Foundation; either version 2.1 of the License, or
|
|
-- (at your option) any later version.
|
|
--
|
|
-- Alog 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 Lesser General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU Lesser General Public License
|
|
-- along with Alog; if not, write to the Free Software
|
|
-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
-- MA 02110-1301 USA
|
|
--
|
|
|
|
with Ada.Finalization;
|
|
with Ada.Unchecked_Deallocation;
|
|
with Ada.Strings.Unbounded;
|
|
|
|
with Alog.Facilities;
|
|
with Alog.Transforms;
|
|
with Alog.Controlled_Map;
|
|
|
|
-- Logger instance. Facilities can be attached to a logger instance in order
|
|
-- to log to different targets simultaneously. A logger provides different
|
|
-- helper functions for logging facilities configuration.
|
|
package Alog.Logger is
|
|
|
|
type Instance (Init : Boolean) is tagged limited private;
|
|
-- Logger instance. The Init discriminant defines whether or not a default
|
|
-- 'stdout' (FD facility without logfile set) is attached automatically.
|
|
--- Set Init to 'True' if you want to make sure minimal stdout logging is
|
|
-- possible as soon as a new logger is instantiated.
|
|
|
|
type Handle is access all Instance;
|
|
-- Handle to logger type.
|
|
|
|
procedure Attach_Facility
|
|
(Logger : in out Instance;
|
|
Facility : Facilities.Handle);
|
|
-- Attach a facility to logger instance.
|
|
|
|
procedure Attach_Default_Facility (Logger : in out Instance);
|
|
-- Attach default facility with name Default_Facility_Name to logger
|
|
-- instance. If the default facility is already attached do nothing.
|
|
|
|
procedure Detach_Facility
|
|
(Logger : in out Instance;
|
|
Name : String);
|
|
-- Detach a facility with name 'Name' from logger instance. If the facility
|
|
-- is not found a Facility_Not_Found exception is raised.
|
|
|
|
procedure Detach_Default_Facility (Logger : in out Instance);
|
|
-- Detach default facility with name Default_Facility_Name from logger
|
|
-- instance. If the default facility is not attached do nothing.
|
|
|
|
function Facility_Count (Logger : Instance) return Natural;
|
|
-- Return number of attached facilites.
|
|
|
|
procedure Update
|
|
(Logger : Instance;
|
|
Name : String;
|
|
Process : not null access
|
|
procedure (Facility_Handle : Facilities.Handle));
|
|
-- Update a specific Facility identified by 'Name'. Call the 'Process'
|
|
-- procedure to perform the update operation.
|
|
|
|
procedure Iterate
|
|
(Logger : Instance;
|
|
Process : not null access
|
|
procedure (Facility_Handle : Facilities.Handle));
|
|
-- Call 'Process' for all attached facilities.
|
|
|
|
procedure Attach_Transform
|
|
(Logger : in out Instance;
|
|
Transform : Transforms.Handle);
|
|
-- Attach a transform to logger instance.
|
|
|
|
procedure Detach_Transform
|
|
(Logger : in out Instance;
|
|
Name : String);
|
|
-- Detach a transform with name 'Name' from logger instance. If the
|
|
-- transform is not found a Transform_Not_Found exception is raised.
|
|
|
|
function Transform_Count (Logger : Instance) return Natural;
|
|
-- Return number of attached transforms.
|
|
|
|
procedure Update
|
|
(Logger : Instance;
|
|
Name : String;
|
|
Process : not null access
|
|
procedure (Transform_Handle : Transforms.Handle));
|
|
-- Update a specific Transform identified by 'Name'. Call the 'Process'
|
|
-- procedure to perform the update operation.
|
|
|
|
procedure Iterate
|
|
(Logger : Instance;
|
|
Process : not null access
|
|
procedure (Transform_Handle : Transforms.Handle));
|
|
-- Call 'Process' for all attached transforms.
|
|
|
|
procedure Clear (L : in out Instance);
|
|
-- Clear logger instance. Detach and teardown all attached facilities and
|
|
-- transforms.
|
|
|
|
procedure Log_Message
|
|
(Logger : Instance;
|
|
Level : Log_Level;
|
|
Msg : String;
|
|
Source : String := "");
|
|
-- Log a message. The Write_Message() procedure of all attached facilities
|
|
-- is called. Depending on the Log-Threshold set, the message is logged to
|
|
-- different targets (depending on the facilites) automatically.
|
|
--
|
|
-- Prior to actually processing the given log message the policy database
|
|
-- is inquired if the log message with given source and level should be
|
|
-- logged.
|
|
|
|
procedure Free is new Ada.Unchecked_Deallocation
|
|
(Object => Facilities.Class,
|
|
Name => Facilities.Handle);
|
|
-- Free memory allocated by a facility.
|
|
|
|
procedure Free is new Ada.Unchecked_Deallocation
|
|
(Object => Transforms.Class,
|
|
Name => Transforms.Handle);
|
|
-- Free memory allocated by a transform.
|
|
|
|
Facility_Not_Found : exception;
|
|
-- Will be raised if a requested facility is not found.
|
|
Facility_Already_Present : exception;
|
|
-- Will be raised if a facility is already present.
|
|
Transform_Not_Found : exception;
|
|
-- Will be raised if a requested transform is not found.
|
|
Transform_Already_Present : exception;
|
|
-- Will be raised if a facility is already present. .
|
|
|
|
Default_Facility_Name : constant String := "__Default_Facility";
|
|
|
|
private
|
|
|
|
use Ada.Strings.Unbounded;
|
|
use Alog.Facilities;
|
|
use Alog.Transforms;
|
|
|
|
procedure Initialize (Logger : in out Instance);
|
|
-- Initialize the logger instance.
|
|
|
|
procedure Finalize (Logger : in out Instance);
|
|
-- Finalize procedure used to cleanup.
|
|
|
|
package Map_Of_Transforms_Package is new Alog.Controlled_Map
|
|
(Key_Type => Unbounded_String,
|
|
Element_Type => Transforms.Class,
|
|
Element_Handle => Transforms.Handle);
|
|
|
|
package MOTP renames Map_Of_Transforms_Package;
|
|
|
|
package Map_Of_Facilities_Package is new Alog.Controlled_Map
|
|
(Key_Type => Unbounded_String,
|
|
Element_Type => Facilities.Class,
|
|
Element_Handle => Facilities.Handle);
|
|
|
|
package MOFP renames Map_Of_Facilities_Package;
|
|
|
|
type Instance (Init : Boolean) is new
|
|
Ada.Finalization.Limited_Controlled with record
|
|
Facilities : MOFP.Map;
|
|
-- Attached facilities.
|
|
|
|
Transforms : MOTP.Map;
|
|
-- Attached transforms.
|
|
end record;
|
|
|
|
end Alog.Logger;
|