如何使用Laravel 5.6将json格式的日志条目发送到Loggly

时间:2018-07-27 20:45:08

标签: php laravel monolog loggly

我遵循了我认为与Laravel 5.6一起使用Loggly作为Monolog通道的正确设置,但是我一直在获取文本字符串,而不是json可搜索条目。例如:

  

[2018-07-27 14:50:20] local.INFO:数组(    '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",

我认为升级到最新的独白版本可能会有所帮助,但在尝试通过作曲家更新独白时遇到了这种情况:

  

您的要求无法解决为一组可安装的软件包。

     

问题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。这似乎很明智,但最终输出是一个字符串。有什么作用?

2 个答案:

答案 0 :(得分:2)

深入研究monolog和json格式化程序后,修复最终变得非常简单。第一个参数是文本值,第二个参数可以包含一个关联数组,该数组转换为json并可以在Loggly中搜索。

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

答案 1 :(得分:1)

明确指定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')),
    ]
]