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

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

[2018-07-27 14:50:20] local.INFO: array ('foo' = ›'bar',)

Это из свойства unparsed записи Loggly. Ни в коем случае не действительный 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",

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

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

Проблема 1

  • laravel / framework v5.6.21 требует monolog / monolog ~ 1.12 - ›выполняется с помощью monolog / monolog [1.x-dev].
  • laravel / framework v5.6.21 требует monolog / monolog ~ 1.12 - ›выполняется с помощью monolog / monolog [1.x-dev].
  • laravel / framework v5.6.21 требует monolog / 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. Это кажется разумным, но в конечном итоге на выходе получается строка. Что дает?


person amaack    schedule 27.07.2018    source источник
comment
Я думаю, что это должен быть handler_with вместо with, и он поддерживает только аргументы constructur для класса LogglyHandler, поэтому строка тега здесь не работает   -  person AngryUbuntuNerd    schedule 13.09.2018


Ответы (2)


Явно укажите formatter. Это может быть одно из следующих значений:

'formatter' => Monolog\Formatter\JsonFormatter::class,

OR

'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')),
    ]
]
person mishka    schedule 05.08.2018
comment
tag в объекте конфигурации у меня не работал. Мне пришлось создать настройщик, чтобы добавить тег к сообщению. laravel.com/docs/5.8/ - person Saskia; 02.05.2019

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

Log::info('Home Page Loaded',['foo' => 'bar']);
person amaack    schedule 17.09.2018
comment
Это гениально, именно то, что я только что пытался сделать. - person Mick; 06.03.2019