我需要将laravel日志的格式更改为json格式,如下所示:
{
"time":"2015-10-06 15:45:36",
"host":"192.000.000",
"protocol”:”http, tcp",
"remote-addrress": "192.000.001",
"user":"user-logged",
"level": "warning",
"message":"exception",
}
如何做到这一点?
我尝试把下一个代码在bootstrap/app.php,但我不知道如何改变json格式/对象。
$app->configureMonologUsing(function ($monolog) use ($app) {
// Stream handlers
$logPath = $app->storagePath().'/logs/test.log';
$logLevel = 'Monolog'Logger::DEBUG;
$logStreamHandler = new 'Monolog'Handler'StreamHandler($logPath, $logLevel);
$formatter = new 'Monolog'Formatter'JsonFormatter();
$logStreamHandler->setFormatter($formatter);
$monolog->pushHandler($logStreamHandler);
});
这是结果:
{
"message":"info",
"context":[
],
"level":200,
"level_name":"INFO",
"channel":"local",
"datetime":{
"date":"2016-09-22 10:33:38.318064",
"timezone_type":3,
"timezone":"UTC"
},
"extra":[
]
}
引导/app.php
$app->configureMonologUsing(function ($monolog) use ($app) {
// Stream handlers
$logPath = $app->storagePath() . '/logs/laravel.log';
$logLevel = 'Monolog'Logger::DEBUG;
$logStreamHandler = new 'Monolog'Handler'StreamHandler($logPath, $logLevel);
// Formatting
$formatter = new 'App'Components'Log'Formatter'JsonFormatter();
$logStreamHandler->setFormatter($formatter);
$monolog->pushHandler($logStreamHandler);
});
软件/组件/日志/格式化程序/JsonFormatter.php
<?php
namespace App'Components'Log'Formatter;
use Monolog'Formatter'JsonFormatter as BaseJsonFormatter;
/**
* Class JsonFormatter
*
* @package App'Components'Log'Formatter
* @author Miguel Borges <miguelborges@miguelborges.com>
*/
class JsonFormatter extends BaseJsonFormatter
{
const APPLICATION = 'My application';
/**
* {@inheritdoc}
*/
public function format(array $record)
{
$record = [
'time' => $record['datetime']->format('Y-m-d H:i:s'),
'application' => self::APPLICATION,
'host' => request()->server('SERVER_ADDR'),
'remote-addrress' => request()->server('REMOTE_ADDR'),
'level' => $record['level_name'],
'message' => $record['message']
];
if (!empty($record['extra'])) {
$record['payload']['extra'] = $record['extra'];
}
if (!empty($record['context'])) {
$record['payload']['context'] = $record['context'];
}
$json = $this->toJson($this->normalize($record), true) . ($this->appendNewline ? "'n" : '');
return $json;
}
}
您可以在config/logging.php
文件中指定您使用的日志通道中的日志格式化程序。
'channels' => [
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
// THIS IS THE LINE YOU SHOULD ADD
'formatter' => Monolog'Formatter'JsonFormatter::class,
],
// Other channels
],