Как отправить записи журнала в формате json в Loggly с помощью Laravel 5.6

Я придерживался того, что я считаю правильной настройкой Loggly в качестве канала Monolog с Laravel 5.6, но я продолжаю получать строки текста вместо json-записей с возможностью поиска. Например:

[2018-07-27 14:50:20] local.INFO: массив (
‘foo’ => ‘bar’,
)

Это из свойства unparsed записи Loggly. Не действительный JSON на любом участке!

Вот некоторые соответствующие фрагменты кода, чтобы показать, как настроен канал loggly и как я запускаю запись в журнале.

конфиг / 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",

Я подумал, что, возможно, может помочь обновление до более новой версии монолога, но я столкнулся с этим при попытке обновить монолог через композитор:

Ваши требования не могут быть разрешены для устанавливаемого набора пакетов.

Проблема 1

  • laravel / framework v5.6.21 требует монолог / монолог ~ 1.12 -> выполнимый монологом / монологом [1.x-dev].
  • laravel / framework v5.6.21 требует монолог / монолог ~ 1.12 -> выполнимый монологом / монологом [1.x-dev].
  • laravel / framework v5.6.21 требует монолог / монолог ~ 1.12 -> выполнимый монологом / монологом [1.x-dev].
  • Можно установить только одно из: monolog / monolog [2.x-dev, 1.x-dev].
  • Запрос на установку монолога / монолога ^ 2.0 -> выполняется монологом / монологом [2.x-dev].
  • Запрос на установку laravel / framework 5.6.21 -> удовлетворяется laravel / framework [v5.6.21].

Что мне не хватает? Разве Монолог не должен отправлять мой вывод журнала как json в Loggly? Глядя на LogglyHandler, он использует LogglyFormatter, который расширяет JsonFormatter. Это кажется разумным, но в итоге получается строка. Что дает?

0

Решение

Явно укажите 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')),
]
]
1

Другие решения

После глубокого изучения монолога и JSON Formatter исправление оказалось очень простым. Первый параметр — это текстовое значение, а второй Параметр может содержать ассоциативный массив, который переводится в json и доступен для поиска в Loggly.

Log::info('Home Page Loaded',['foo' => 'bar']);
1

По вопросам рекламы [email protected]