我已经使用Laravel 5.6将Loggly作为Monolog通道进行了我认为正确的设置,但我一直得到文本字符串,而不是json可搜索条目。例如:
〔2018-07-27 14:50:20〕本地。信息:数组('foo'=>'bar’,)
这来自Loggly条目的"未解析"属性。无论如何都不是有效的json!!!
下面是一些相关的代码片段,展示了如何设置loggly通道以及如何触发日志条目。
config/logging.php:
'loggly' => [
'driver' => 'monolog',
'handler' => MonologHandlerLogglyHandler::class,
'with' => [
'token' => env('LOGGLY_KEY'),
'tag' => str_replace(' ', '_', env('APP_NAME') . '_' . env('APP_ENV')),
]
]
路线:
Route::get('/', function(){
Log::info(['foo' => 'bar']);
return view('welcome');
});
来自composer.json:
"laravel/framework": "5.6.21",
"monolog/monolog": "^1.23",
我想升级到更新的monlog版本可能会有所帮助,但在尝试通过composer:更新monlog时遇到了这种情况
您的需求无法解析为一组可安装的软件包。
问题1
- laravel/framework v5.6.21需要monlog/monolog~1.12->可由monolog/monolog[1.x-dev]满足
- laravel/framework v5.6.21要求monlog/monolog~1.12->可由monolog/monolog[1.x-dev]满足
- laravel/framework v5.6.21要求monlog/monolog~1.12->可由monolog/monolog[1.x-dev]满足
- 只能安装其中一个:monolog/monolog[2.x-dev,1.x-dev]
- monolog/monolog^2.0->的安装请求;可由monolog/monolog[2.x-dev]满足
- laravel/framework 5.6.21->的安装请求;可由laravel/framework满足[v5.6.21]
我缺少什么?Monolog不应该把我的日志输出作为json发送给Loggly吗?查看LogglyHandler,它使用LogglyFormatter,它扩展了JsonFormatter。这似乎是合理的,但最终输出是一个字符串。什么东西?
明确指定formatter
。它可以是以下之一:
'formatter' => MonologFormatterJsonFormatter::class,
或
'formatter' => 'default',
因此,您的新loggly
通道定义看起来像:
'loggly' => [
'driver' => 'monolog',
'handler' => MonologHandlerLogglyHandler::class,
'formatter' => MonologFormatterJsonFormatter::class,
'with' => [
'token' => env('LOGGLY_KEY'),
'tag' => str_replace(' ', '_', env('APP_NAME') . '_' . env('APP_ENV')),
]
]
在深入研究monlog和json格式化程序后,修复变得非常简单。第一个参数是一个文本值,第二个参数可以包含一个关联数组,该数组可以转换为json并在Loggly中搜索。
Log::info('Home Page Loaded',['foo' => 'bar']);