henk-s
12/29/2016 - 7:12 PM

DevLog

DevLog

<?php

namespace App\Helper;

/**
 * Class DevLog
 * @package App\Helper
 *
 * Simple log class to log to a file
 *
 * Will try to determine type of message and
 * present accordingly.
 *
 */
class DevLog
{
    /**
     * @var array
     * Add hostnames that should not be allowed for logging
     */
    public static $disallowed_hosts = [
        // add hosts
    ];

    private static function canLog($log_location, $safe_mode){

        if (!file_exists($log_location)) {
            touch($log_location);
        }

        return (
            in_array(gethostname(), self::$disallowed_hosts) &&
            $safe_mode
        );
    }

    public static function la($message, $log_location = '/tmp/dev.log', $mode = FILE_APPEND, $safe_mode = true)
    {
        //if (false === self::canLog($log_location, $safe_mode)) {
            file_put_contents($log_location, implode(',', $message), $mode);
        //}
    }

    /**
     * @param $message
     * The message that should be logged, can be of any type
     * @param bool $json_encode
     * Json encode the result
     * @param string $log_location
     * Location of the logfile. the default location should work always
     * @param int $mode
     * file_put_contents mode, default is append to file
     * @param bool $safe_mode
     * Don't run on (production) servers as defined in $disallowed_hosts
     */
    public static function lf($message, $json_encode = true, $log_location = '/tmp/dev.log', $mode = FILE_APPEND, $safe_mode = true)
    {
        if (false === self::canLog($log_location, $safe_mode)) {
            file_put_contents($log_location, self::processMessage($message, $json_encode).PHP_EOL, $mode);
        }
    }

    private static function processMessage($message, $json_encode)
    {
        if (is_object($message) && true === $json_encode) {
            return json_encode($message);
        } else if (is_object($message)) {
            try {
                return serialize($message);
            } catch (\Exception $c) {
                return $message;
            }
        }

        if (true === $json_encode) {
            return json_encode($message);
        } else {
            if (is_array($message)) {
                return serialize($message);
            }
        }

        return $message;
    }

    public static function get_calling_class() {
        $trace = debug_backtrace();
        $class = $trace[1]['class'];

        if (!empty($class)) {

            for ($i=1; $i < count($trace); $i++ ) {

                if (isset($trace[$i]) && isset($trace[$i]['class'])) {

                    if ( $class != $trace[$i]['class'] )
                        self::lf($trace[$i]['class']);
                }
            }
        }
    }
}