LoggerMessage::log()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
3
namespace yiicod\base\helpers;
4
5
use Throwable;
6
7
/**
8
 * Class LoggerMessage
9
 * Logger helper
10
 *
11
 * @package yiicod\base\helpers
12
 */
13
class LoggerMessage
14
{
15
    /**
16
     * Return error message
17
     *
18
     * @param Throwable $e
19
     * @param string $additional
20
     *
21
     * @return string
22
     */
23
    public static function log(Throwable $e, string $additional = ''): string
24
    {
25
        if (false === empty($additional)) {
26
            return sprintf("%s (%s : %s)\nAdditional message:\n%s\nStack trace:\n%s", $e->getMessage(), $e->getFile(), $e->getLine(), $additional, $e->getTraceAsString());
27
        } else {
28
            return sprintf("%s (%s : %s)\nStack trace:\n%s", $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
29
        }
30
    }
31
32
    /**
33
     * Get trace message
34
     *
35
     * @param string $message
36
     * @param array $data
37
     *
38
     * @return string
39
     */
40
    public static function trace(string $message, array $data = []): string
41
    {
42
        return self::message($message, $data, 5);
43
    }
44
45
    /**
46
     * Get info message
47
     *
48
     * @param string $message
49
     * @param array $data
50
     *
51
     * @return string
52
     */
53
    public static function info(string $message, array $data = []): string
54
    {
55
        if (YII_ENV_TEST) {
56
            return self::message($message, $data, 5);
57
        } else {
58
            return '';
59
        }
60
    }
61
62
    /**
63
     * Get message with trace level
64
     *
65
     * @param string $message
66
     * @param array $data
67
     * @param int $traceLevel
68
     *
69
     * @return string
70
     */
71
    private static function message(string $message, array $data = [], $traceLevel = 5): string
72
    {
73
        $msg = sprintf('%s', str_replace(array_map(function ($item) {
74
            return '{' . $item . '}';
75
        }, array_keys($data)),
76
            array_values($data), $message));
77
        $msg = sprintf('%s', str_replace(array_keys($data), array_values($data), $msg));
78
        if ($traceLevel > 0) {
79
            $traces = debug_backtrace();
80
            unset($traces[0]); //Remove LoggerMessage from trace
81
            $count = 0;
82
            foreach ($traces as $trace) {
83
                if (isset($trace['file'], $trace['line']) && 0 !== strpos($trace['file'], YII2_PATH)) {
84
                    $msg .= "\nin " . $trace['file'] . ' (' . $trace['line'] . ')';
85
                    if (++$count >= $traceLevel) {
86
                        break;
87
                    }
88
                }
89
            }
90
        }
91
92
        return $msg;
93
    }
94
}
95