【问题标题】:How can I send json formatted log entries to Loggly with Laravel 5.6如何使用 Laravel 5.6 将 json 格式的日志条目发送到 Loggly
【发布时间】:2019-01-05 00:19:05
【问题描述】:

我已经按照我认为将 Loggly 设置为 Laravel 5.6 的 Monolog 频道的正确设置,但我不断获取文本字符串而不是 json 可搜索条目。例如:

[2018-07-27 14:50:20] local.INFO: 数组 ( 'foo' => '酒吧', )

这是来自 Loggly 条目的“未解析”属性。无论如何都不是有效的json!!!

这里有一些相关的 sn-ps 代码,展示了如何设置 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,它使用扩展JsonFormatter 的LogglyFormatter。这似乎是明智的,但最终输出是一个字符串。什么给了?

【问题讨论】:

  • 我认为它需要是“handler_with”而不是“with”,并且只支持 LogglyHandler 类的构造参数 - 所以“标签”行在这里不起作用

标签: php laravel monolog loggly


【解决方案1】:

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

【讨论】:

  • 配置对象中的tag 对我不起作用。我必须创建一个定制器来将标签添加到消息中。 laravel.com/docs/5.8/…
【解决方案2】:

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

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

【讨论】:

  • 这真是天才,正是我一直在努力做的。
猜你喜欢
  • 2017-01-28
  • 2013-07-27
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多