Log.php
3.3 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
namespace Yansongda\Supports;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Psr\Log\LoggerInterface;
/**
* @method static void emergency($message, array $context = array())
* @method static void alert($message, array $context = array())
* @method static void critical($message, array $context = array())
* @method static void error($message, array $context = array())
* @method static void warning($message, array $context = array())
* @method static void notice($message, array $context = array())
* @method static void info($message, array $context = array())
* @method static void debug($message, array $context = array())
* @method static void log($message, array $context = array())
*/
class Log
{
/**
* Logger instance.
*
* @var LoggerInterface
*/
protected static $logger;
/**
* Forward call.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $method
* @param array $args
*
* @throws \Exception
*
* @return mixed
*/
public static function __callStatic($method, $args)
{
return forward_static_call_array([self::getLogger(), $method], $args);
}
/**
* Forward call.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $method
* @param array $args
*
* @throws \Exception
*
* @return mixed
*/
public function __call($method, $args)
{
return call_user_func_array([self::getLogger(), $method], $args);
}
/**
* Return the logger instance.
*
* @author yansongda <me@yansongda.cn>
*
* @throws \Exception
*
* @return LoggerInterface
*/
public static function getLogger()
{
return self::$logger ?: self::$logger = self::createLogger();
}
/**
* Set logger.
*
* @author yansongda <me@yansongda.cn>
*
* @param LoggerInterface $logger
*/
public static function setLogger(LoggerInterface $logger)
{
self::$logger = $logger;
}
/**
* Tests if logger exists.
*
* @author yansongda <me@yansongda.cn>
*
* @return bool
*/
public static function hasLogger()
{
return self::$logger ? true : false;
}
/**
* Make a default log instance.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $file
* @param string $identify
* @param int|string $level
* @param string $type
* @param int $max_files
*
* @throws \Exception
*
* @return \Monolog\Logger
*/
public static function createLogger($file = null, $identify = 'yansongda.supports', $level = Logger::DEBUG, $type = 'daily', $max_files = 30)
{
$file = is_null($file) ? sys_get_temp_dir().'/logs/'.$identify.'.log' : $file;
$handler = $type === 'single' ? new StreamHandler($file, $level) : new RotatingFileHandler($file, $max_files, $level);
$handler->setFormatter(
new LineFormatter("%datetime% > %channel%.%level_name% > %message% %context% %extra%\n\n", null, false, true)
);
$logger = new Logger($identify);
$logger->pushHandler($handler);
return $logger;
}
}