10 <input type='checkbox' id='[id]'> <label for='[id]'>show [lines] lines</label>
20 <tr><td colspan='2'><hr></td></tr>
21 <tr><td class='skipped' colspan='2'>Skipped * bytes</td></tr>";
26 protected function value($value){
27 $value = parent::value($value);
28 return $this->maxLines && (($lines = substr_count($value,
"\n") + 1) > $this->maxLines) ? strtr($this->templateMaxLines,[
29 '[id]' => \
Rsi\Str::random(),
35 protected function format($prio,$context){
36 if(strlen($result = parent::format($prio,$context)) > $this->maxSize){
37 $result = substr($result,0,$this->maxSize);
38 $result = substr($result,0,strrpos($result,
"</tr>\n<tr>") + 5);
44 $result = $body =
null;
45 if($size = filesize($this->filename))
try{
46 \Rsi\File::write($this->timeFilename,date(
'c'),0666);
48 fseek($f = fopen($this->indexFilename,
'r'),$skipped = max(0,filesize($this->indexFilename) - $this->maxSize));
49 $index = fread($f,$this->maxSize);
51 file_put_contents($this->indexFilename,
null);
52 if($skipped) $index = substr($index,strpos($index,
"<tr"));
53 if(preg_match_all(
'/<tr.*?(' . str_replace(
'*',
'\\w+\\b',$this->hashFormat) .
')/',$index,$hashes))
54 foreach(($hashes = array_count_values($hashes[1])) as $hash => $count){
55 $body .=
"<input type='checkbox' id='$hash' class='hide-all'>";
56 $index = str_replace($hash .
'-count',$count,substr_replace($index,$count == 1 ?
'single ' :
'first ',strpos($index,$hash),0));
59 fseek($f = fopen($this->filename,
'r'),$skipped = max(0,$size - $this->maxSize));
60 $log = fread($f,$this->maxSize);
62 file_put_contents($this->filename,
null);
64 $log = str_replace(
'*',$skipped,$this->templateSkipped) . substr($log,$extra = strpos($log,
"\n<tr"));
67 if(preg_match_all(
'/\\[hashes\\|(.*?)\\]/',$message = strtr(\
Rsi\File::read($this->templateFile),[
68 '[time]' => date(
'Y-m-d H:i:s'),
69 '[host]' => $host = \
Rsi\Http::host(),
70 '[ip]' => $_SERVER[
'SERVER_ADDR'] ?? gethostbyname($host),
74 ]),$matches,PREG_SET_ORDER))
foreach($matches as $match){
76 foreach($hashes as $hash => $count)
if($count > 1) $replace[] = str_replace(
'*',$hash,$match[1]);
77 $message = str_replace($match[0],implode(
',',$replace) ?: str_replace(
'*',
'single',$this->hashFormat),$message);
79 if($log) $result = $this->_log->component(
'mail')->send(
81 $this->to ?: ini_get(
'sendmail_from'),
82 str_replace(
'*',$host,$this->subject),
88 if($this->_log->fred->debug)
throw $e;
94 public function add($prio,$message,$context){
95 parent::add($prio,$message,$context);
96 $age = time() - $this->_log->filemtime($this->timeFilename);
98 (($prio >= $this->threshold) && ($prio < \
Rsi\Fred\
Log::CUSTOM) && ($age >= $this->interval * 60)) ||
99 ($age > $this->deadline * 60)
104 if(!parent::getFilename()) $this->_filename = \Rsi\File::tempDir() .
"maillog-{$this->name}.tmp";
109 return $this->filename .
'.time';