FRED™  3.0
FRED™: Framework for Rapid and Easy Development
Mem.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Rsi\Fred\Log\Handler;
4 
5 class Mem extends \Rsi\Fred\Log\Handler{
6 
7  public $messages = [];
8  public $maxSize = 1024; //!< Maximum number of messages to store (empty = unlimited).
9  public $save = null; //!< Number of logs to save.
10  public $filename = null; //!< Filename to store logs.
11  public $mode = 0666;
12 
13  public function add($prio,$message,$context){
14  if($this->maxSize && (count($this->messages) >= $this->maxSize))
15  $this->messages = array_slice($this->messages,$this->maxSize >> 1);
16  $this->_log->fred->stripObjects($context);
17  $this->messages[] = ['time' => microtime(true)] + compact('prio','message','context');
18  }
19 
20  protected function init(){
21  parent::init();
22  if($this->save) $this->_log->component('event')->listen(\Rsi\Fred::EVENT_HALT,[$this,'save']);
23  }
24 
25  public function save(){
26  $log = [
27  'start' => $this->_log->fred->startTime,
28  'end' => microtime(true),
29  'file' => $_SERVER['REQUEST_URI'] ?? $_SERVER['PHP_SELF'] ?? null,
30  'mem' => memory_get_peak_usage(true),
31  'get' => $_GET,
32  'post' => $_POST,
33  'files' => $_FILES,
34  'code' => http_response_code(),
35  'session' => $_SESSION,
36  'server' => $_SERVER,
37  'messages' => $this->messages
38  ];
39  if($this->_log->fred->has('db')){
40  $db = $this->_log->fred->db;
41  $log['db'] = ['count' => $db->queryCount,'time' => $db->queryTime];
42  }
43  if(!$this->filename) $this->filename = \Rsi\File::tempDir() . 'log.dat';
44  try{
45  $logs = array_slice(\Rsi\File::unserialize($this->filename,[]) ?: [],1 - $this->save,null,true);
46  $logs[$temp = \Rsi\Str::random()] = $log;
47  \Rsi\File::serialize($temp = $this->filename . $temp,$logs,$this->mode);
48  rename($temp,$this->filename);
49  }
50  catch(\Exception $e){
51  \Rsi\File::unlink($this->filename);
52  $this->_log->component('log')->error($e);
53  }
54  }
55 
56 }
Rsi\Fred\Log\Handler\Mem\$filename
$filename
Filename to store logs.
Definition: Mem.php:10
Rsi
Rsi\Fred\Log\Handler\Mem\$maxSize
$maxSize
Maximum number of messages to store (empty = unlimited).
Definition: Mem.php:8
Rsi\Fred\Log\Handler\Mem\init
init()
Definition: Mem.php:20
Rsi\Fred\Log\Handler\Mem\$mode
$mode
Definition: Mem.php:11
Rsi\Fred\Log\Handler
Definition: Console.php:3
Rsi\Fred\Log\Handler\Mem
Definition: Mem.php:5
Rsi\Fred\Log\Handler\Mem\$save
$save
Number of logs to save.
Definition: Mem.php:9
Rsi\Fred\Log\Handler\Mem\$messages
$messages
Definition: Mem.php:7
Rsi\Fred\Log\Handler\Mem\add
add($prio, $message, $context)
Definition: Mem.php:13
Rsi\Fred\Log\Handler\Mem\save
save()
Definition: Mem.php:25
Rsi\Fred\Exception
Definition: Exception.php:5