基于Laravel 重写Logger

基于Laravel 重写Logger方法

  • Support\LogTool
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php

namespace App\Support;

use Monolog\Handler\AbstractProcessingHandler;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;

/**
* Class LogTool
*
* @method static debug($msg, array $context=[])
* @method static info($msg, array $context=[])
* @method static notice($msg, array $context=[])
* @method static warning($msg, array $context=[])
* @method static error($msg, array $context=[])
* @method static critical($msg, array $context=[])
* @method static alert($msg, array $context=[])
* @method static emergency($msg, array $context=[])
* @package App\Support
*/
class LogTool
{
const LEVEL_DEFAULT = 0;

const LEVEL_STR = [
'debug' => Logger::DEBUG,
'info' => Logger::INFO,
'notice' => Logger::NOTICE,
'warning' => Logger::WARNING,
'error' => Logger::ERROR,
'critical' => Logger::CRITICAL,
'alert' => Logger::ALERT,
'emergency' => Logger::EMERGENCY,
];

/**
* @param $name
* @param int $log_level
* @param string $file_name
* @return Logger
* @throws \Exception
*/
public static function getLogger($name, $log_level = self::LEVEL_DEFAULT, $file_name ='logger.log'){
if (self::LEVEL_DEFAULT == $log_level){
$log_level = static::str2level(config('logging.level', 'info'));
}
$days = config('logging.channels.daily.days', 10);
$log_path = storage_path(). '/logs/' . $file_name;
$logger = new Logger($name);
$handler = new RotatingFileHandler($log_path, $days);
$handler->setLevel( $log_level );
$logger->pushHandler( $handler);
static::addDingHandler($logger);

return $logger;
}

/**
* @param string $name
* @return Logger
* @throws \Exception
*/
public static function getDefaultLogger(string $name = 'main')
{
/** @var Logger $instance */
static $instance = null;
if (null === $instance){
$instance = LogTool::getLogger($name, self::LEVEL_DEFAULT, 'logger.log');
}
return $instance;
}

/**
* @param string $name
* @return Logger
* @throws \Exception
*/
public static function getSqlLogger(string $name = 'main')
{
/** @var Logger $instance */
static $instance = null;
if (null === $instance){
$instance = static::getLogger($name, self::LEVEL_DEFAULT, 'db_sql.log');
}
return $instance;
}

/**
* @param string $name
* @return Logger
* @throws \Exception
*/
public static function getJobLogger(string $name = 'main')
{
/** @var Logger $instance */
static $instance = null;
if (null === $instance) {
$instance = static::getLogger($name, self::LEVEL_DEFAULT, 'job.log');
}

return $instance;
}

/**
* @param string $name
* @return int|mixed
*/
public static function str2level(string $name)
{
$name = strtolower($name);
if (key_exists($name, static::LEVEL_STR)) {
return static::LEVEL_STR[$name];
} else {
return Logger::INFO;
}
}

/**
* add support of ding message on ERROR detected in logging.
*
* @param Logger $logger
*/
public static function addDingHandler($logger)
{
$handler = new class extends AbstractProcessingHandler {
public function write(array $record)
{
if (config('logging.alert_ding', false) && $record['level'] >= 400){
$msg = $record['channel'] . '.'. $record['level_name'] . ' ' . $record['message'];
DingRobot::textMessage(DingRobot::DING_URL, $msg);
}
}
};

$logger->pushHandler($handler);
}

/**
* easy interface of psr Logger.
*
* @param $name
* @param $arguments
* @throws \Exception
*/
public static function __callStatic($name, $arguments)
{
static::getDefaultLogger()->$name(...$arguments);
}
}
  • config\logging
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
<?php

use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;

return [

/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/

'default' => env('LOG_CHANNEL', 'stack'),

/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/

'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
'ignore_exceptions' => false,
],

'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],

'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],

'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],

'papertrail' => [
'driver' => 'monolog',
'level' => 'debug',
'handler' => SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
],
],

'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],

'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],

'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
],

];

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :