Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
50.00% covered (danger)
50.00%
5 / 10
37.50% covered (danger)
37.50%
3 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
LoggerBase
50.00% covered (danger)
50.00%
5 / 10
37.50% covered (danger)
37.50%
3 / 8
19.12
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 format
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 logImpl
n/a
0 / 0
n/a
0 / 0
0
 log
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 trace
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 debug
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 info
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 warn
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 error
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace PeServer\Core\Log;
6
7use DateTimeImmutable;
8use PeServer\Core\Log\ILogger;
9use PeServer\Core\Log\Logging;
10
11/**
12 * ログ出力基底。
13 */
14abstract class LoggerBase implements ILogger
15{
16    /**
17     * 生成。
18     *
19     * @param LogOptions $options
20     */
21    protected function __construct(
22        protected readonly Logging $logging,
23        protected readonly LogOptions $options
24    ) {
25    }
26
27    #region function
28
29    /**
30     * ログ書式適用。
31     *
32     * @param int $level ログレベル
33     * @phpstan-param ILogger::LOG_LEVEL_* $level 有効レベル。
34     * @param int $traceIndex トレース位置。
35     * @phpstan-param non-negative-int $traceIndex
36     * @param mixed $message メッセージ。
37     * @phpstan-param LogMessageAlias $message
38     * @param mixed ...$parameters パラメータ。
39     * @return string
40     */
41    protected function format(int $level, int $traceIndex, $message, ...$parameters): string
42    {
43        return $this->logging->format($this->options->format, $level, $traceIndex + 1, new DateTimeImmutable(), $this->options->header, $message, ...$parameters);
44    }
45
46    /**
47     * ログ出力実装。
48     *
49     * @param int $level ログレベル。
50     * @phpstan-param self::LOG_LEVEL_* $level ログレベル。
51     * @param int $traceIndex 現在フレーム数。
52     * @phpstan-param non-negative-int $traceIndex
53     * @param mixed $message メッセージかオブジェクト。
54     * @phpstan-param LogMessageAlias $message
55     * @param mixed ...$parameters パラメータ(可変個)。$messageが文字列の場合はプレースホルダー {\d} に対して置き換え処理が行われるがその場合は所謂0始まり・抜けなしの配列を想定している。
56     * @return void
57     */
58    abstract protected function logImpl(int $level, int $traceIndex, $message, ...$parameters): void;
59
60    #endregion
61
62    #region ILogger
63
64    public function log(int $level, int $traceIndex, $message, ...$parameters): void
65    {
66        // 有効レベル未満であれば何もしない
67        if ($level < $this->options->level) {
68            return;
69        }
70
71        $this->logImpl($level, $traceIndex + 1, $message, ...$parameters);
72    }
73
74    final public function trace($message, ...$parameters): void
75    {
76        $this->log(self::LOG_LEVEL_TRACE, $this->options->baseTraceIndex + 1, $message, ...$parameters);
77    }
78    final public function debug($message, ...$parameters): void
79    {
80        $this->log(self::LOG_LEVEL_DEBUG, $this->options->baseTraceIndex + 1, $message, ...$parameters);
81    }
82    final public function info($message, ...$parameters): void
83    {
84        $this->log(self::LOG_LEVEL_INFORMATION, $this->options->baseTraceIndex + 1, $message, ...$parameters);
85    }
86    final public function warn($message, ...$parameters): void
87    {
88        $this->log(self::LOG_LEVEL_WARNING, $this->options->baseTraceIndex + 1, $message, ...$parameters);
89    }
90    final public function error($message, ...$parameters): void
91    {
92        $this->log(self::LOG_LEVEL_ERROR, $this->options->baseTraceIndex + 1, $message, ...$parameters);
93    }
94
95    #endregion
96}