Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
57.89% |
11 / 19 |
|
40.00% |
2 / 5 |
CRAP | |
0.00% |
0 / 1 |
Logging | |
57.89% |
11 / 19 |
|
40.00% |
2 / 5 |
31.80 | |
0.00% |
0 / 1 |
__construct | |
62.50% |
5 / 8 |
|
0.00% |
0 / 1 |
2.21 | |||
path | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
filename | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
filepath | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
mkPath | |
50.00% |
4 / 8 |
|
0.00% |
0 / 1 |
22.50 |
1 | <?php |
2 | namespace DiegoSorrentino\Library; |
3 | |
4 | /** |
5 | * Logging class for PHP scripts |
6 | * Stores log file for a process in "<basePath>/processName/YYYY-MM-DD.log" |
7 | * if prefixDir is not set, try to store in "./". |
8 | * if the procedure is unable to create "<basePath>/processName" directory, fallback to /dev/stderr |
9 | * |
10 | * @param $processName string set filename for log file. Default value 'file.log'. It will be $path/$filename |
11 | * @param $basePath string (nullable) set basePath to store log file. Default value './log/' (if not exists it will be created) |
12 | */ |
13 | class Logging{ |
14 | public const fallbackFilePath = '/dev/stderr'; |
15 | |
16 | private string $path; |
17 | private string $filename; |
18 | private string $filepath; |
19 | |
20 | public function __construct( string $processName = 'process/', string $basePath = './'){ |
21 | |
22 | $this->path = sprintf("%s/%s", $basePath, $processName) ; |
23 | $this->filename = sprintf("%s.log", date('Y-m-d')); |
24 | |
25 | if( ! $this->mkPath($this->path) ){ |
26 | $this->filepath = self::fallbackFilePath; |
27 | ini_set ( 'error_log', $this->filepath); |
28 | return; |
29 | } |
30 | |
31 | $this->filepath = sprintf('%s/%s', $this->path, $this->filename); |
32 | |
33 | ini_set ( 'error_log', $this->filepath); |
34 | } |
35 | |
36 | /** |
37 | * Path of current log dir |
38 | * |
39 | * @return string Path of current log dir |
40 | */ |
41 | public function path():string { return $this->path; } |
42 | |
43 | /** |
44 | * Filename of current log file |
45 | * |
46 | * @return string Filename of current log file |
47 | */ |
48 | public function filename():string { return $this->filename; } |
49 | |
50 | /** |
51 | * Full filepath of current log file |
52 | * |
53 | * @return string Full filepath of current log file |
54 | */ |
55 | public function filepath():string { return $this->filepath; } |
56 | |
57 | /** |
58 | * Create path dir for log files |
59 | * Check if file exists AND is directory AND is writable, or try to create/set it permission |
60 | * |
61 | * @param string $path Lock path to try to create |
62 | * |
63 | * @return bool True if file exists AND is directory AND is writable, false otherwise |
64 | */ |
65 | private function mkPath(string $path):bool{ |
66 | if( file_exists($path) && is_dir($path) && is_writable($path) ) |
67 | return true; |
68 | |
69 | if( file_exists($path) && is_dir($path) && ! is_writable($path) ) |
70 | return chmod($path, 0755); |
71 | |
72 | if( file_exists($path) && ! is_dir($path) ){ |
73 | if ( ! unlink($path) ) |
74 | return false; //and below i try to mkdir |
75 | } |
76 | |
77 | //file not exists |
78 | return mkdir($path, 0755, true); |
79 | } |
80 | } |
81 | |
82 | ?> |