Procedure
AdaBase.Driver.Base.[DB].attach_custom_logger (logger_access :
AdaBase.Logger.Base.BaseClass_Logger_access)
The procedure allows a customized logger that meets the criteria of the logger interface to be used to record database activity. Once attached, logging begins immediately.
Procedure
AdaBase.Driver.Base.[DB].detach_custom_logger ()
This procedure permanently removes an attached custom logger. To restore logging, the logger will have to be attached again.
with AdaBase.Logger.Base;
package MyLogger is
package ALB renames AdaBase.Logger.Base;
type CustomLogger is new ALB.Base_Logger and ALB.AIL.iLogger
with null record;
overriding
procedure reaction (listener : CustomLogger);
clogger : aliased CustomLogger;
end MyLogger;
Example custom logger code: testcases/fruit4/mylogger.ads
with Ada.Text_IO.Unbounded_IO;
package body MyLogger is
package UIO renames Ada.Text_IO.Unbounded_IO;
package TIO renames Ada.Text_IO;
overriding
procedure reaction (listener : CustomLogger) is
begin
if listener.is_error then
TIO.Put_Line ("## SQLSTATE: " & listener.sqlstate);
TIO.Put_Line ("## Driver:" & listener.error_code'Img &
"(" & listener.driver'Img & ")");
TIO.Put ("## Error: "); UIO.Put_Line (listener.error_msg);
TIO.Put_Line ("## Phase: " & listener.category'Img);
else
TIO.Put_Line ("## Phase: " & listener.category'Img);
TIO.Put ("## message: "); UIO.Put_Line (listener.message);
end if;
end reaction;
end MyLogger;
Example custom logger code: testcases/fruit4/mylogger.adb
with AdaBase;
with Connect;
with MyLogger;
with Ada.Text_IO;
with AdaBase.Logger.Facility;
procedure Fruit4 is
package CON renames Connect;
package TIO renames Ada.Text_IO;
package ALF renames AdaBase.Logger.Facility;
numrows : AdaBase.Affected_Rows;
cmd1 : constant String := "INSERT INTO fruits (fruit, color, calories) " &
"VALUES ('blueberry', 'purple', 1)";
cmd2 : constant String := "INSERT INTO fruits (fruit, color, calories) " &
"VALUES ('date', 'brown', 66)";
atch : constant String := "The custom logger has been attached.";
dtch : constant String := "The custom logger has been detached.";
begin
CON.DR.attach_custom_logger (logger_access => MyLogger.clogger'Access);
TIO.Put_Line (atch);
CON.connect_database;
numrows := CON.DR.execute (sql => cmd1);
TIO.Put_Line ("SQL: " & cmd1);
TIO.Put_Line ("Result: Inserted" & numrows'Img & " rows");
TIO.Put_Line ("ID of last inserted row:" & CON.DR.last_insert_id'Img);
CON.DR.detach_custom_logger;
TIO.Put_Line (dtch);
numrows := CON.DR.execute (sql => cmd2);
TIO.Put_Line ("SQL: " & cmd2);
TIO.Put_Line ("Result: Inserted" & numrows'Img & " rows");
TIO.Put_Line ("ID of last inserted row:" & CON.DR.last_insert_id'Img);
CON.DR.attach_custom_logger (logger_access => MyLogger.clogger'Access);
TIO.Put_Line (atch);
CON.DR.commit;
CON.DR.disconnect;
end Fruit4;
Example code: testcases/fruit4/fruit4.adb
The custom logger has been attached.
## Phase: CONNECTING
## message: Connection to adabase_examples database succeeded.
## Phase: EXECUTION
## message: INSERT INTO fruits (fruit, color, calories) VALUES ('blueberry', 'purple', 1)
SQL: INSERT INTO fruits (fruit, color, calories) VALUES ('blueberry', 'purple', 1)
Result: Inserted 1 rows
ID of last inserted row: 38
The custom logger has been detached.
SQL: INSERT INTO fruits (fruit, color, calories) VALUES ('date', 'brown', 66)
Result: Inserted 1 rows
ID of last inserted row: 39
The custom logger has been attached.
## Phase: TRANSACTION
## message: END TRANSACTION (COMMIT)
## Phase: DISCONNECTING
## message: Disconnect From database
Output using any driver
[DB] is "MySQL.MySQL_Driver", "PostgreSQL.PostgreSQL_Driver", or "SQLite.SQLite_Driver"