CacheLogger::debug()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 2
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
namespace Silviooosilva\CacheerPhp\Utils;
4
5
6
/**
7
 * Class CacheLogger
8
 * @author Sílvio Silva <https://github.com/silviooosilva>
9
 * @package Silviooosilva\CacheerPhp
10
 */
11
class CacheLogger
12
{
13
    private mixed $logFile;
14
    private mixed $maxFileSize; // 5 MB by default
15
    private string $logLevel;
16
    private array $logLevels = ['DEBUG', 'INFO', 'WARNING', 'ERROR'];
17
18
    public function __construct($logFile = 'cacheer.log', $maxFileSize = 5 * 1024 * 1024, $logLevel = 'DEBUG')
19
    {
20
        $this->logFile = $logFile;
21
        $this->maxFileSize = $maxFileSize;
22
        $this->logLevel = strtoupper($logLevel);
23
    }
24
25
    /**
26
    * Logs a info message.
27
    * 
28
    * @return void
29
    */
30
    public function info($message): void
31
    {
32
        $this->log('INFO', $message);
33
    }
34
35
    /**
36
    * Logs a warning message.
37
    *
38
    * @return void
39
    */
40
    public function warning($message): void
41
    {
42
        $this->log('WARNING', $message);
43
    }
44
45
    /**
46
    * Logs an error message.
47
    * 
48
    * @return void
49
    */
50
    public function error($message): void
51
    {
52
        $this->log('ERROR', $message);
53
    }
54
55
    /**
56
    * Logs a debug message.
57
    * 
58
    * @return void
59
    */
60
    public function debug($message): void
61
    {
62
        $this->log('DEBUG', $message);
63
    }
64
65
    /**
66
     * Checks if the log level is sufficient to log the message.
67
     *
68
     * @param mixed $level
69
     * @return bool
70
     */
71
    private function shouldLog(mixed $level): bool
72
    {
73
        return array_search($level, $this->logLevels) >= array_search($this->logLevel, $this->logLevels);
74
    }
75
76
    /**
77
    * Rotates the log file if it exceeds the maximum size.
78
    * 
79
    * @return void
80
    */
81
    private function rotateLog(): void
82
    {
83
        if (file_exists($this->logFile) && filesize($this->logFile) >= $this->maxFileSize) {
84
            $date = date('Y-m-d_H-i-s');
85
            rename($this->logFile, "cacheer_$date.log");
86
        }
87
    }
88
89
    /**
90
    * Logs a message to the log file.
91
    * 
92
    * @param mixed $level
93
    * @param string $message
94
    * @return void
95
    */
96
    private function log(mixed $level, string $message): void
97
    {
98
        if (!$this->shouldLog($level)) {
99
            return;
100
        }
101
102
        $this->rotateLog();
103
104
        $date = date('Y-m-d H:i:s');
105
        $logMessage = "[$date] [$level] $message" . PHP_EOL;
106
        file_put_contents($this->logFile, $logMessage, FILE_APPEND);
107
    }
108
}
109