-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.php
35 lines (29 loc) · 901 Bytes
/
logger.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
# @license MIT
# Creates logger callable
function logger($path, $prio = LOG_ERR, $pmap = []) {
$pref = $pmap + [
LOG_EMERG => 'EMERGENCY',
LOG_ALERT => 'ALERT',
LOG_CRIT => 'CRITICAL',
LOG_ERR => 'ERROR',
LOG_WARNING => 'WARNING',
LOG_NOTICE => 'NOTICE',
LOG_INFO => 'INFO',
LOG_DEBUG => 'DEBUG',
];
$base = dirname($path);
if ($base !== '.' && !file_exists($base)) {
throw new InvalidArgumentException("Directory {$base} doesn't exist.");
}
if (touch($path) === false) {
throw new InvalidArgumentException("Unable to create log file {$path}.");
}
return function ($level, $text, ...$args) use ($path, $prio, $pref) {
if ($level <= $prio) {
$t = strftime('%Y-%m-%d %H:%M:%S');
$s = sprintf('[%s] %s: '.$text.PHP_EOL, $t, $pref[$level], ...$args);
file_put_contents($path, $s, LOCK_EX|FILE_APPEND);
}
};
}