-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLoggerFactory.php
More file actions
79 lines (63 loc) · 2.32 KB
/
LoggerFactory.php
File metadata and controls
79 lines (63 loc) · 2.32 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
declare(strict_types=1);
namespace Phenix\Logging;
use Amp\ByteStream;
use Amp\Cluster\Cluster;
use Amp\Log\ConsoleFormatter;
use Amp\Log\StreamHandler;
use Monolog\Formatter\LineFormatter;
use Monolog\Level;
use Monolog\Logger;
use Monolog\Processor\PsrLogMessageProcessor;
use Phenix\Constants\ServerMode;
use Phenix\Contracts\Makeable;
use Phenix\Exceptions\RuntimeError;
use Phenix\Facades\Config;
use Phenix\Facades\File;
class LoggerFactory implements Makeable
{
public static function make(string $key, ServerMode $serverMode = ServerMode::SINGLE): Logger
{
/** @var int|string|null $levelConfig */
$levelConfig = Config::get('app.debug_level');
$level = Level::tryFrom((int) $levelConfig) ?? Level::Debug;
if ($serverMode === ServerMode::CLUSTER && Cluster::isWorker()) {
$logHandler = Cluster::createLogHandler($level);
} else {
$logHandler = match ($key) {
'file' => self::fileHandler($level),
'stream' => self::streamHandler($level),
default => throw new RuntimeError("Unsupported logging channel: {$key}"),
};
}
$logger = new Logger(self::buildName($serverMode));
$logger->pushHandler($logHandler);
return $logger;
}
private static function streamHandler(Level $level): StreamHandler
{
$logHandler = new StreamHandler(ByteStream\getStdout(), $level);
$logHandler->pushProcessor(new PsrLogMessageProcessor());
$logHandler->setFormatter(new ConsoleFormatter());
return $logHandler;
}
private static function fileHandler(Level $level): StreamHandler
{
$path = Config::get('logging.path');
if (! File::exists($path)) {
File::put($path, '');
}
$file = File::openFile($path, 'a');
$logHandler = new StreamHandler($file, $level);
$logHandler->pushProcessor(new PsrLogMessageProcessor());
$logHandler->setFormatter(new LineFormatter());
return $logHandler;
}
private static function buildName(ServerMode $serverMode = ServerMode::SINGLE): string
{
if ($serverMode === ServerMode::CLUSTER && Cluster::isWorker()) {
return 'phenix-worker-' . (Cluster::getContextId() ?? getmypid());
}
return 'phenix';
}
}