如何使用 Laravel 5.6 将 json 格式的日志条目发送到 Loggly
How can I send json formatted log entries to Loggly with Laravel 5.6
我已经按照我认为是 Loggly 的正确设置作为带有 Laravel 5.6 的独白频道,但我一直在获取文本字符串而不是 json 可搜索条目。例如:
[2018-07-27 14:50:20] local.INFO: array (
'foo' => 'bar',
)
这是来自 Loggly 条目的 'unparsed' 属性。无论如何都不是有效的 json!!!
这里有一些相关的代码片段,展示了如何设置 loggly 通道以及如何触发日志条目。
config/logging.php:
'loggly' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\LogglyHandler::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",
我想也许升级到更新的 monolog 版本可能会有所帮助,但是 运行 在尝试通过 composer 更新 monolog 时:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- Can only install one of: monolog/monolog[2.x-dev, 1.x-dev].
- Installation request for monolog/monolog ^2.0 -> satisfiable by monolog/monolog[2.x-dev].
- Installation request for laravel/framework 5.6.21 -> satisfiable by laravel/framework[v5.6.21].
我错过了什么? Monolog 不应该将我的日志输出作为 json 发送到 Loggly 吗?查看LogglyHandler,它使用扩展JsonFormatter 的LogglyFormatter。这似乎是明智的,但最后输出的是一个字符串。给出了什么?
明确指定 formatter
。它可以是以下之一:
'formatter' => Monolog\Formatter\JsonFormatter::class,
或
'formatter' => 'default',
因此,您的新 loggly
频道定义类似于:
'loggly' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\LogglyHandler::class,
'formatter' => Monolog\Formatter\JsonFormatter::class,
'with' => [
'token' => env('LOGGLY_KEY'),
'tag' => str_replace(' ', '_', env('APP_NAME') . '_' . env('APP_ENV')),
]
]
深入研究 monolog 和 json 格式化程序后,修复变得非常简单。第一个参数是一个文本值,第二个参数可以包含一个关联数组,该数组被翻译成json并且可以在Loggly中搜索。
Log::info('Home Page Loaded',['foo' => 'bar']);
我已经按照我认为是 Loggly 的正确设置作为带有 Laravel 5.6 的独白频道,但我一直在获取文本字符串而不是 json 可搜索条目。例如:
[2018-07-27 14:50:20] local.INFO: array ( 'foo' => 'bar', )
这是来自 Loggly 条目的 'unparsed' 属性。无论如何都不是有效的 json!!!
这里有一些相关的代码片段,展示了如何设置 loggly 通道以及如何触发日志条目。
config/logging.php:
'loggly' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\LogglyHandler::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",
我想也许升级到更新的 monolog 版本可能会有所帮助,但是 运行 在尝试通过 composer 更新 monolog 时:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- laravel/framework v5.6.21 requires monolog/monolog ~1.12 -> satisfiable by monolog/monolog[1.x-dev].
- Can only install one of: monolog/monolog[2.x-dev, 1.x-dev].
- Installation request for monolog/monolog ^2.0 -> satisfiable by monolog/monolog[2.x-dev].
- Installation request for laravel/framework 5.6.21 -> satisfiable by laravel/framework[v5.6.21].
我错过了什么? Monolog 不应该将我的日志输出作为 json 发送到 Loggly 吗?查看LogglyHandler,它使用扩展JsonFormatter 的LogglyFormatter。这似乎是明智的,但最后输出的是一个字符串。给出了什么?
明确指定 formatter
。它可以是以下之一:
'formatter' => Monolog\Formatter\JsonFormatter::class,
或
'formatter' => 'default',
因此,您的新 loggly
频道定义类似于:
'loggly' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\LogglyHandler::class,
'formatter' => Monolog\Formatter\JsonFormatter::class,
'with' => [
'token' => env('LOGGLY_KEY'),
'tag' => str_replace(' ', '_', env('APP_NAME') . '_' . env('APP_ENV')),
]
]
深入研究 monolog 和 json 格式化程序后,修复变得非常简单。第一个参数是一个文本值,第二个参数可以包含一个关联数组,该数组被翻译成json并且可以在Loggly中搜索。
Log::info('Home Page Loaded',['foo' => 'bar']);