ADOdb

Database Abstraction Layer for PHP

User Tools

Site Tools


v5:reference:logging

This is an old revision of the document!


Logging

ADOdb provides an internal debugging system that exposes the SQL commands used to execute a command, as well as other messages that can provide guidance when, for example, trying to establish a connection to the database. The earliest that debugging can be started is after instantiating the driver but before connection. In its simplest usage, debugging is enabled as follows:

include '/adodb-dir/adodb.inc.php';
 
$db = newAdoConnection('mysqli');
 
/*
* Initialize debugging
*/
$db->debug = true;
 
$db->connect('host','user','pass','database');

This might produce output something like:

-----<hr>
(mysqli): select * from usersx 
   
-----<hr>
Query: select * from usersx failed. Table 'db.usersx' doesn't exist
1146: Table 'db.usersx' doesn't exist
ADOConnection._Execute(select * from usersx, false)% line 1313, file: C:\dev\GitHub\ADOdb\adodb.inc.php
ADOConnection.Execute(select * from usersx)% line   46, file: C:\dev\tests\test7.php

The output is suitable for viewing in a browser, with messages from the database driver as well as backtrace data if there are problems. Note that debugging can be switched on and off during code execution as required.

Alternative Debugging Levels

The following alternative levels are available. Each produces a slightly different output.

Debug Level Description
true Default as described above
-1 The most minimal logging level. Formatted as the default option, but does not include backtrace data or any ADOdb debugging/logging messages
-99 Adds ADOdb messages to the above format, but no backtrace data
99 The logging equivalent of true
2 Use the datalogging object as described below

Overriding The Default Logging Function

The default logging behavior is to send all messages to STDOUT, but the behavior may be modified by either:

  1. Defining a constant ADODB_OUTP which holds the name of the function that overrides the standard value
  2. A variable $ADODB_OUTP which is globalized and achieves the same as above. This function can be dynamically changed.

Function Definition

The overriding function must accept 2 arguments:

  1. A String which contains the message
  2. A boolean which indicates whether to throw a newling. This may be discarded based on how the function works

Example

DEFINE ('ADODB_OUTP','myLogger');
 
function myLogger($msg,$discard)
{
    print "\nThis is my messsage: $msg";
} 

The ADOdataLoggingObject

When the debug level is true, any output is placed in an ADOdataLoggingObject, which must be extracted via an overriding ``ADODB_OUTP`` function. There are no internal methods for extracting and displaying the information. The messages are unformatted.

**
* An object in which to log/store activity data
*/
class ADODataLoggingObject
{
	/*
	* The SQL statement(s) processed, if any
	*/
	public $sql;
 
	/*
	* The bind data, if any
	*/
	public $inputArray;
 
	/*
	* The database driver error
	*/
	public $errorNo = 0;
 
	/*
	* The database driver error message
	*/
	public $errorMessage;
 
	/*
	* The ADOdb Meta error number
	*/
	public $metaErrorNo = 0;
 
	/*
	* The ADOdb Meta error message
	*/
	public $metaErrorMessage;
 
	/*
	* The backtrace
	*/
	public $backTrace;
 
	/*
	* An error level that can be set if required
	* default INFO
	*/
	public $errorLevel = LOG_INFO;
}

Using Monolog For Logging Data

The PHP standard logging class Monolog can be used directly with the ADOdataLoggingObject. in this example, we use it to create a classic text log from the ADOdb output.

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
 
require '/dev/github/vendor/autoload.php';
 
 
/*
* Tags log messages with ADOdb
*/
$loggingObject = new \Monolog\Logger('ADOdb');
$loggingObject->pushHandler(new StreamHandler('/var/logs/adodb.log', Logger::WARNING));
 
 
function logMessage($message,$newline=false)
{
	print_r($message);
 
	$message = json_encode($message);
 
	global $loggingObject;
 
	$level = -1;
	switch ($level)
	{
		default:
		$loggingObject->log(Logger::WARNING,$message);
		break;
	}
}
 
 
DEFINE('ADODB_OUTP','logMessage').
DEFINE('ADODB_OUTP_OBJECT',1).
v5/reference/logging.1577757437.txt.gz · Last modified: 2019/12/31 02:57 by mnewnham