Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
33.33% |
6 / 18 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 2 |
| KLoggerFactory | |
50.00% |
6 / 12 |
|
0.00% |
0 / 2 |
8.12 | |
0.00% |
0 / 1 |
| getLogger | |
54.55% |
6 / 11 |
|
0.00% |
0 / 1 |
5.50 | |||
| closeAll | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| NullKLogger | |
0.00% |
0 / 6 |
|
0.00% |
0 / 6 |
42 | |
0.00% |
0 / 1 |
| LogInfo | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| LogDebug | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| LogWarn | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| LogError | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| LogFatal | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| Log | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * KLogger Factory - Manages KLogger instances to prevent too many open files |
| 5 | */ |
| 6 | class KLoggerFactory { |
| 7 | private static $instances = []; |
| 8 | private static $maxInstances = 20; // Limit number of logger instances |
| 9 | |
| 10 | /** |
| 11 | * Get a logger instance (singleton per file) |
| 12 | * |
| 13 | * @param string $logFile The log file path |
| 14 | * @param int $priority The log priority level |
| 15 | * @return KLogger |
| 16 | */ |
| 17 | public static function getLogger($logFile, $priority = KLogger::DEBUG) { |
| 18 | // Normalize the log file path |
| 19 | $logFile = realpath(dirname($logFile)) . '/' . basename($logFile); |
| 20 | |
| 21 | // Check if we already have this logger |
| 22 | if (isset(self::$instances[$logFile])) { |
| 23 | return self::$instances[$logFile]; |
| 24 | } |
| 25 | |
| 26 | // If we've hit the limit, close the oldest logger |
| 27 | if (count(self::$instances) >= self::$maxInstances) { |
| 28 | $oldestFile = array_key_first(self::$instances); |
| 29 | unset(self::$instances[$oldestFile]); |
| 30 | // The destructor will close the file handle |
| 31 | } |
| 32 | |
| 33 | // Create new logger instance |
| 34 | try { |
| 35 | self::$instances[$logFile] = new KLogger($logFile, $priority); |
| 36 | return self::$instances[$logFile]; |
| 37 | } catch (Exception $e) { |
| 38 | error_log("KLoggerFactory: Failed to create logger for $logFile - " . $e->getMessage()); |
| 39 | // Return a null logger that won't write to files |
| 40 | return new NullKLogger(); |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | /** |
| 45 | * Close all logger instances |
| 46 | */ |
| 47 | public static function closeAll() { |
| 48 | self::$instances = []; |
| 49 | } |
| 50 | } |
| 51 | |
| 52 | /** |
| 53 | * Null logger for when file creation fails |
| 54 | */ |
| 55 | class NullKLogger { |
| 56 | public function LogInfo($line) {} |
| 57 | public function LogDebug($line) {} |
| 58 | public function LogWarn($line) {} |
| 59 | public function LogError($line) {} |
| 60 | public function LogFatal($line) {} |
| 61 | public function Log($line, $priority) {} |
| 62 | } |