mirror of https://git.codelabs.ch/alog.git
110 lines
3.0 KiB
Ada
110 lines
3.0 KiB
Ada
--
|
|
-- Copyright (c) 2008-2011,
|
|
-- 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 Interfaces.C.Strings;
|
|
|
|
package body Alog.Facilities.Syslog is
|
|
|
|
package C renames Interfaces.C;
|
|
|
|
type L_Type is mod 2 ** 3;
|
|
for L_Type'Size use 3;
|
|
|
|
type F_Type is mod 2 ** 8;
|
|
for F_Type'Size use 8;
|
|
|
|
Level_Map : constant array (Log_Level) of L_Type
|
|
:= (Debug => 7,
|
|
Info => 6,
|
|
Notice => 5,
|
|
Warning => 4,
|
|
Error => 3,
|
|
Critical => 2,
|
|
Alert => 1,
|
|
Emergency => 0);
|
|
|
|
Facility_Map : constant array (Syslog_Origin) of F_Type
|
|
:= (LOG_KERN => 0,
|
|
LOG_USER => 8,
|
|
LOG_MAIL => 16,
|
|
LOG_DAEMON => 24,
|
|
LOG_AUTH => 32,
|
|
LOG_SYSLOG => 40,
|
|
LOG_LPR => 48,
|
|
LOG_NEWS => 56,
|
|
LOG_UUCP => 64,
|
|
LOG_CRON => 72,
|
|
LOG_AUTHPRIV => 80,
|
|
LOG_FTP => 88,
|
|
LOG_LOCAL0 => 128,
|
|
LOG_LOCAL1 => 136,
|
|
LOG_LOCAL2 => 144,
|
|
LOG_LOCAL3 => 152,
|
|
LOG_LOCAL4 => 160,
|
|
LOG_LOCAL5 => 168,
|
|
LOG_LOCAL6 => 176,
|
|
LOG_LOCAL7 => 184);
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
function Get_Origin (Facility : Instance) return Syslog_Origin
|
|
is
|
|
begin
|
|
return Facility.Origin;
|
|
end Get_Origin;
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
procedure Set_Origin
|
|
(Facility : in out Instance;
|
|
Value : Syslog_Origin)
|
|
is
|
|
begin
|
|
Facility.Origin := Value;
|
|
end Set_Origin;
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
procedure Write
|
|
(Facility : Instance;
|
|
Level : Log_Level := Info;
|
|
Msg : String)
|
|
is
|
|
use type C.int;
|
|
|
|
procedure Syslog_Wrapper
|
|
(Prio : C.int;
|
|
Msg : C.Strings.chars_ptr);
|
|
pragma Import (C, Syslog_Wrapper, "syslog_wrapper");
|
|
|
|
C_Msg : C.Strings.chars_ptr := C.Strings.New_String (Str => Msg);
|
|
C_Prio : constant C.int := C.int (Level_Map (Level)) +
|
|
C.int (Facility_Map (Facility.Origin));
|
|
begin
|
|
Syslog_Wrapper (Prio => C_Prio,
|
|
Msg => C_Msg);
|
|
|
|
C.Strings.Free (C_Msg);
|
|
end Write;
|
|
|
|
end Alog.Facilities.Syslog;
|