mirror of https://git.codelabs.ch/alog.git
161 lines
5.5 KiB
Ada
161 lines
5.5 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.Strings.Bounded;
|
|
with Ada.Strings.Unbounded;
|
|
with Ada.Command_Line;
|
|
with Ada.Calendar;
|
|
|
|
with Alog.Log_Request;
|
|
|
|
-- Alog facilities package. Provides common data and methods used by all
|
|
-- facilities.
|
|
package Alog.Facilities is
|
|
|
|
use Ada.Strings.Bounded;
|
|
use Ada.Strings.Unbounded;
|
|
|
|
type Instance is abstract tagged limited private;
|
|
-- Abstract type facility instance. All facilities in the Alog framework
|
|
-- must implement this type.
|
|
|
|
subtype Class is Instance'Class;
|
|
|
|
type Handle is access all Class;
|
|
|
|
function "="
|
|
(Left : Handle;
|
|
Right : Handle) return Boolean;
|
|
-- Equal function.
|
|
|
|
procedure Set_Name
|
|
(Facility : in out Class;
|
|
Name : String);
|
|
-- Set facility name.
|
|
|
|
function Get_Name (Facility : Class) return String;
|
|
-- Get facility name.
|
|
|
|
function Get_Timestamp
|
|
(Facility : Class;
|
|
Time : Ada.Calendar.Time := Ada.Calendar.Clock)
|
|
return String;
|
|
-- Creates a timestamp and returns it as String. If no Time is given, the
|
|
-- current time is used.
|
|
|
|
procedure Process
|
|
(Facility : Class;
|
|
Request : Log_Request.Instance);
|
|
-- Process a log request.
|
|
|
|
procedure Write
|
|
(Facility : Instance;
|
|
Level : Log_Level := Info;
|
|
Msg : String) is abstract;
|
|
-- Write message with specified log level. This procedure must be
|
|
-- implemented by all facilities.
|
|
|
|
procedure Toggle_Write_Timestamp
|
|
(Facility : in out Class;
|
|
State : Boolean);
|
|
-- Enable/disable whether a timestamp is written for log messages.
|
|
|
|
procedure Toggle_UTC_Timestamp
|
|
(Facility : in out Class;
|
|
State : Boolean);
|
|
-- Enable/disable UTC timestamps for log messages.
|
|
|
|
function Is_Write_Timestamp (Facility : Class) return Boolean;
|
|
-- Returns the current value of Write_Timestamp.
|
|
|
|
function Is_UTC_Timestamp (Facility : Class) return Boolean;
|
|
-- Returns True if the timestamp of the facility is written in UTC time.
|
|
|
|
procedure Set_Timestamp_Format
|
|
(Facility : in out Class;
|
|
Format : String);
|
|
-- Set timestamp format. The format follows the GNU Date specification with
|
|
-- some GNAT specific extensions. See the GNAT.Calendar.Time_IO specs for
|
|
-- details about the accepted directives. The procedure raises an
|
|
-- Invalid_Timestamp_Format exception if the given format is incorrect.
|
|
-- If no specific format is set, '%b %d %Y %T' is used as default.
|
|
|
|
procedure Toggle_Write_Loglevel
|
|
(Facility : in out Class;
|
|
State : Boolean);
|
|
-- Enable/disable whether the loglevel is written for log messages.
|
|
|
|
function Is_Write_Loglevel (Facility : Class) return Boolean;
|
|
-- Returns the current value of Write_Loglevel.
|
|
|
|
procedure Toggle_Write_Source
|
|
(Facility : in out Class;
|
|
State : Boolean);
|
|
-- Enable/disable whether the source of the message is logged.
|
|
|
|
function Is_Write_Source (Facility : Class) return Boolean;
|
|
-- Returns True if writing of log message sources is enabled.
|
|
|
|
procedure Setup (Facility : in out Instance) is null;
|
|
-- Each facility must provide a Setup-procedure. These procedures are
|
|
-- called by Logger instances when attaching Facilities. All needed
|
|
-- operations prior to writing log messages should be done here.
|
|
|
|
procedure Teardown (Facility : in out Instance) is null;
|
|
-- Each facility must provide a Teardown-procedure. These procedures are
|
|
-- called by Logger instances when detaching Facilities or when the logger
|
|
-- object gets out of scope.
|
|
|
|
Invalid_Timestamp_Format : exception;
|
|
|
|
private
|
|
|
|
package BS_Path is new Generic_Bounded_Length (Max => Max_Path_Length);
|
|
-- Bounded string with length Max_Path_Length. Used in methods which
|
|
-- involve filesystem operations.
|
|
|
|
type Instance is abstract tagged limited record
|
|
Name : Unbounded_String
|
|
:= To_Unbounded_String (Ada.Command_Line.Command_Name);
|
|
-- Facility Name. Defaults to command-name (first argument). If multiple
|
|
-- facilities are used, names must be set differently.
|
|
|
|
Timestamp_Format : Unbounded_String
|
|
:= To_Unbounded_String ("%b %d %Y %T");
|
|
-- Default timestamp format to use in this facility.
|
|
|
|
Write_Timestamp : Boolean := True;
|
|
-- If True, a timestamp is written with the log message.
|
|
|
|
UTC_Timestamp : Boolean := False;
|
|
-- If True, the timestamp is written in UTC time.
|
|
-- (log message timestamps are written timezone-dependent).
|
|
|
|
Write_Loglevel : Boolean := False;
|
|
-- If True, the loglevel associated with the log message is written.
|
|
|
|
Write_Source : Boolean := True;
|
|
-- If True, the source of a log message is prepended to the message.
|
|
end record;
|
|
|
|
end Alog.Facilities;
|