User Tools

Site Tools


dr:logging

This is an old revision of the document!


Logging module

Currently, various modules within core and contrib use various tables to store historical (i.e. “write once, read sometimes, never update”) data. The most obvious is the “watchdog” table, but others exist, including “accesslog”, and “zeitgeist”'s eponym table.

Logging through a unified API has the potential to reduce the code volume somehow, as all logging functions could be made one, and could also potentially be simplified to automatically record some information so that modules invoking the function don't have to write in some parameters, that could be recorded automatically.

The logging module could be used as a facade between recording modules and modules with data to record, allowing for multiples logging formats (think distributed logging, for instance, or logging to a printer for some physical audit trail situations).

  • Modules wishing to be registered as potential recorders would use a function like:
  global $logging_recorders = array();
 
  /**
   * @param string $recordee The name of the function to use the logging mechanism
   * @param string $recorder The name of the function offering to record for $recordee
   */
  function logging_register_recorder($recordee, $recorder) 
    {
    global $logging_recorders;
 
    $recorders[$recordee][$recorder] = 1;
    }
 
  • While modules wishing to allow for logging of their call parameters could just use code like:
  if (function_exists('logging_record_entry')) 
    {
    logging_record_entry();
    }
 
  • At this point, the logging mechanism would go through the array of recorders, check whether one or more recorders have registered for the calling function, and pass them the calling function information:
  fonction logging_record_entry() 
    {
    global $logging_recorders;
 
    $recordee = debug_backtrace[0]['function'];
    $args = debug_backtrace[0]['args'];
    if (array_key_exists($recordee, $logging_recorders))
      {
      foreach($logging_recorders[$recordee] as $recorder => $count)
        {
        if (is_callable($recorder))
          {
          $recorder($recordee, $args);
          }
        else
          die(t("In logging module, non-callable recorder %recorder was registered for recordee %recordee.",
            array('%recorder' => $recorder, '%recordee => $recordee))) ;
        }
      }
    }
  
dr/logging.1144596917.txt.gz · Last modified: 2020/11/23 17:23 (external edit)