Modules

Kohana_Log

This class is a transparent base class for Log and should not be accessed directly.

Message logging with observer-based log writing.

This class does not support extensions, only additional writers.

package
Kohana
category
Logging
author
Kohana Team
copyright
© 2008-2012 Kohana Team
license
https://kohana.top/license

Class declared in SYSPATH/classes/Kohana/Log.php on line 14.

Constants

EMERGENCY

integer 0

ALERT

integer 1

CRITICAL

integer 2

ERROR

integer 3

WARNING

integer 4

NOTICE

integer 5

INFO

integer 6

DEBUG

integer 7

Properties

public static boolean $write_on_add

immediately write when logs are added

bool FALSE

protected static Log $_instance

Singleton instance container

object Log()
Default value:
object Log(2) {
    protected _messages => array(0) 
    protected _writers => array(1) (
        "000000005933f9c8000000001c2aed4a" => array(2) (
            "object" => object Log_File(2) {
                protected _directory => string(33) "/srv/guides/3.4/application/logs/"
                protected _log_levels => array(8) (
                    0 => string(9) "EMERGENCY"
                    1 => string(5) "ALERT"
                    2 => string(8) "CRITICAL"
                    3 => string(5) "ERROR"
                    4 => string(7) "WARNING"
                    5 => string(6) "NOTICE"
                    6 => string(4) "INFO"
                    7 => string(5) "DEBUG"
                )
            }
            "levels" => array(0) 
        )
    )
}

protected array $_messages

list of added messages

Default value:
array(0) 

protected array $_writers

list of log writers

Default value:
array(0) 

Methods

public add( string $level , string $message [, array $values = NULL , array $additional = NULL ] ) (defined in Kohana_Log)

Adds a message to the log. Replacement values must be passed in to be replaced using strtr.

$log->add(Log::ERROR, 'Could not locate user: :user', [
    ':user' => $username,
]);

Parameters

  • string $level required - Level of message
  • string $message required - Message body
  • array $values = NULL - Values to replace in the message
  • array $additional = NULL - Additional custom parameters to supply to the log writer

Return Values

  • Log

Source Code

public function add($level, $message, array $values = null, array $additional = null)
{
    if ($values) {
        // Insert the values into the message
        $message = strtr($message, $values);
    }

    // Grab a copy of the trace
    if (isset($additional['exception'])) {
        $trace = $additional['exception']->getTrace();
    } else {
        // Older php version don't have 'DEBUG_BACKTRACE_IGNORE_ARGS', so manually remove the args from the backtrace
        if (!defined('DEBUG_BACKTRACE_IGNORE_ARGS')) {
            $trace = array_map(function ($item) {
                unset($item['args']);
                return $item;
            }, array_slice(debug_backtrace(false), 1));
        } else {
            $trace = array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 1);
        }
    }

    if ($additional == null) {
        $additional = [];
    }

    // Create a new message
    $this->_messages[] = [
        'time' => time(),
        'level' => $level,
        'body' => $message,
        'trace' => $trace,
        'file' => isset($trace[0]['file']) ? $trace[0]['file'] : null,
        'line' => isset($trace[0]['line']) ? $trace[0]['line'] : null,
        'class' => isset($trace[0]['class']) ? $trace[0]['class'] : null,
        'function' => isset($trace[0]['function']) ? $trace[0]['function'] : null,
        'additional' => $additional,
    ];

    if (Log::$write_on_add) {
        // Write logs as they are added
        $this->write();
    }

    return $this;
}

public attach( Log_Writer $writer [, mixed $levels = array(0) , integer $min_level = integer 0 ] ) (defined in Kohana_Log)

Attaches a log writer, and optionally limits the levels of messages that will be written by the writer.

$log->attach($writer);

Parameters

  • Log_Writer $writer required - Instance
  • mixed $levels = array(0) - Array of messages levels to write OR max level to write
  • integer $min_level = integer 0 - Min level to write IF $levels is not an array

Return Values

  • Log

Source Code

public function attach(Log_Writer $writer, $levels = [], $min_level = 0)
{
    if (!is_array($levels)) {
        $levels = range($min_level, $levels);
    }

    $this->_writers["{$writer}"] = [
        'object' => $writer,
        'levels' => $levels
    ];

    return $this;
}

public detach( Log_Writer $writer ) (defined in Kohana_Log)

Detaches a log writer. The same writer object must be used.

$log->detach($writer);

Parameters

  • Log_Writer $writer required - Instance

Return Values

  • Log

Source Code

public function detach(Log_Writer $writer)
{
    // Remove the writer
    unset($this->_writers["{$writer}"]);

    return $this;
}

public static instance( ) (defined in Kohana_Log)

Get the singleton instance of this class and enable writing at shutdown.

$log = Log::instance();

Return Values

  • Log

Source Code

public static function instance()
{
    if (Log::$_instance === null) {
        // Create a new instance
        Log::$_instance = new Log;

        // Write the logs at shutdown
        register_shutdown_function([Log::$_instance, 'write']);
    }

    return Log::$_instance;
}

public write( ) (defined in Kohana_Log)

Write and clear all of the messages.

$log->write();

Return Values

  • void

Source Code

public function write()
{
    if (empty($this->_messages)) {
        // There is nothing to write, move along
        return;
    }

    // Import all messages locally
    $messages = $this->_messages;

    // Reset the messages array
    $this->_messages = [];

    foreach ($this->_writers as $writer) {
        if (empty($writer['levels'])) {
            // Write all of the messages
            $writer['object']->write($messages);
        } else {
            // Filtered messages
            $filtered = [];

            foreach ($messages as $message) {
                if (in_array($message['level'], $writer['levels'])) {
                    // Writer accepts this kind of message
                    $filtered[] = $message;
                }
            }

            // Write the filtered messages
            $writer['object']->write($filtered);
        }
    }
}