Newer
Older
smart-home-server / server / Fury / Kernel / Logging.php
<?php

namespace Fury\Kernel;

/**
 * Class for free logging
 */

class Logging extends \Fury\Libs\Singleton{
	/**
	 * Storage for session logs
	 *
	 * @var arrray
	 */
	protected $storage;

	/**
	 * Unique ID of SESSION
	 *
	 * @var string
	 */
	protected $session_id;

	/**
	 * Path to folder with logs
	 *
	 * @var string
	 */
	public $logs_folder;

	public function __construct(){
		if(!FCONF['logs_enable'])
				return false;

		$this -> storage = [];
		$this -> session_id = uniqid();
		$this -> logs_folder = FCONF['logs_folder'];
	}

	/**
	 * Set new log item
	 *
	 * @method set
	 *
	 * @param  string $place String in format "Classname@methname" or "funcname"
	 * @param  string $title Title of log. 
	 * @param  string $message Any text message
	 */
	public function set($place, $title, $message){
		if(!FCONF['logs_enable'])
				return false;

		if(strpos($place, '@') === false){
			$class = '';
			$meth = $place;
		}else{
			list($class, $meth) = explode('@', $place);
		}

		$this -> storage[] = [
			'class' => $class,
			'meth' => $meth,
			'title' => $title,
			'message' => $message,
			'timestamp' => microtime(true)
		];

		return true;
	}


	/**
	 * Dumping session logs to json file
	 *
	 * @method dump
	 *
	 * @return boolean Result of writing to log file
	 */
	public function dump(){
		$log_filename = date('d.m.Y') . '.log.json';
		$path_to_log_file = $this -> logs_folder . '/' . $log_filename;
		$session = [
			'session_id' => $this -> session_id,
			'timestamp' => microtime(true),
			'logs' => $this -> storage
		];

		if(!file_exists($path_to_log_file)){
			file_put_contents($path_to_log_file, '');
			chmod($path_to_log_file, 0755);
			return file_put_contents($path_to_log_file, json_encode([$session], JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
		}

		$logs = json_decode(file_get_contents($path_to_log_file), true);
		$logs[] = $session;
		return file_put_contents($path_to_log_file, json_encode($logs, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
	}
}