FRED™  3.0
FRED™: Framework for Rapid and Easy Development
File.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Rsi\Fred\Log\Handler;
4 
5 class File extends \Rsi\Fred\Log\Handler{
6 
7  public $format = null;
8  public $dateTimeFormat = 'Y-m-d H:i:s';
9  public $separator = "\n*****\n\n";
10  public $maxSize = 102400;
11 
12  protected $_filename = null;
13  protected $_lastInsertTime = null;
14 
15  protected function format($prio,$context){
16  $result = $this->separator;
17  foreach($context as $key => $value) if(strlen($result .= $key . ': ' . print_r($value,true) . "\n") > $this->maxSize){
18  $result .= "...\n";
19  break;
20  }
21  return $result;
22  }
23 
24  public function add($prio,$message,$context){
25  global $argv;
26 
27  if($this->filename) try{
28  $context = [
29  '*date/time' => $this->_lastInsertTime = date($this->dateTimeFormat),
30  '*message' => $message,
31  '*prio' => $prio
32  ] + $context;
33  if(\Rsi::commandLine()) $context = ['*command' => implode(' ',[0 => get_included_files()[0]] + ($argv ?: []))] + $context;
34  else{
35  if($user_agent = $this->_log->component('client')->userAgent) $context = ['*user agent' => $user_agent] + $context;
36  if($referrer = $_SERVER['HTTP_REFERER'] ?? null) $context = ['*referrer' => $referrer] + $context;
37  $context = [
38  '*request' => $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . ' ' . $_SERVER['SERVER_PROTOCOL'],
39  '*remote addr' => $_SERVER['REMOTE_ADDR'],
40  '*started' => date($this->dateTimeFormat,floor($this->_log->fred->startTime))
41  ] + $context;
42  }
43  \Rsi\File::mkdir(\Rsi\File::dirname($this->filename));
44  \Rsi\File::write($this->filename,$this->format($prio,$context),0666,true);
45  }
46  catch(\Exception $e){
47  if($this->_log->fred->debug) throw $e;
48  }
49  }
50  /**
51  * Delete the file for the next period (when rotating logs).
52  */
53  public function deleteNext(){
54  if($this->format){
55  $time = time();
56  foreach([60,3600,86400] as $delta) if(($next = \Rsi\Str::replaceDate($this->format,$time + $delta)) != $this->filename){
57  \Rsi\File::unlink($next);
58  break;
59  }
60  }
61  }
62 
63  protected function getFilename(){
64  if($this->_filename === null){
65  $this->_filename = $this->_config['filename'] ?? null;
66  if(!$this->_filename) $this->_filename = \Rsi\Str::replaceDate($this->format);
67  }
68  return $this->_filename;
69  }
70 
71 }
Rsi\Fred\Log\Handler\File\deleteNext
deleteNext()
Delete the file for the next period (when rotating logs).
Definition: File.php:53
Rsi\Fred\Log\Handler\File\format
format($prio, $context)
Definition: File.php:15
Rsi
Rsi\Fred\Log\Handler\File\add
add($prio, $message, $context)
Definition: File.php:24
Rsi\Fred\Log\Handler\File\$dateTimeFormat
$dateTimeFormat
Definition: File.php:8
Rsi\Fred\Log\Handler\File\getFilename
getFilename()
Definition: File.php:63
Rsi\Fred\Log\Handler\File\$maxSize
$maxSize
Definition: File.php:10
Rsi\Fred\Log\Handler\File\$_lastInsertTime
$_lastInsertTime
Definition: File.php:13
Rsi\Fred\Log\Handler
Definition: Console.php:3
Rsi\Fred\Log\Handler\File\$_filename
$_filename
Definition: File.php:12
Rsi\Fred\Log\Handler\File\$format
$format
Definition: File.php:7
Rsi\Fred\Log\Handler\File\$separator
$separator
Definition: File.php:9
Rsi\Fred\Log\Handler\File
Definition: File.php:5
Rsi\Fred\Exception
Definition: Exception.php:5