garbetjie/monolog-bigquery-handler

一个可配置的Monolog处理器,用于将日志写入BigQuery。

v1.4.0 2018-09-07 06:28 UTC

This package is auto-updated.

Last update: 2024-08-29 03:47:31 UTC


README

一个简单(且可配置)的Monolog处理器,用于将日志消息写入BigQuery,利用Google的google/cloud-bigquery PHP客户端。

安装

composer require garbetjie/monolog-bigquery-handler

需要PHP 7.0。

入门

处理器期望BigQuery数据集和表已经创建好 - 处理器不会创建它们。

您可以使用以下命令(使用BigQuery命令行工具)来创建一个最小的表,该表能够接受日志记录(用实际的$dataset$table名称替换)

bq mk --schema="channel:string,message:string,level:integer,level_name:string,context:string,extra:string,datetime:timestamp" --time_partitioning_field="datetime" "$dataset.$table"

使用方法

只需创建BigQuery客户端的一个实例,并将其传递给处理器,同时传递要插入日志记录的数据集和表名称。

$bigQueryClient = new Google\Cloud\BigQuery\BigQueryClient();
$handler = new Garbetjie\Monolog\Handler\BigQueryHandler($bigQueryClient, 'dataset_name', 'table_name', $level = Logger::DEBUG, $bubble = true);
$logger = new Monolog\Logger('channel', [$handler]);

$logger->debug('debug message');

上面显示的使用方法将逐个发送每个消息。建议使用BufferHandler。这将确保日志消息被批量处理,并将发送日志消息所花费的时间缩短。

在确定要使用的缓冲区大小时,请确保您了解BigQuery中流式插入配额限制。如果达到这些限制中的任何一个,整个消息批次将失败。

以下是如何使用BufferHandler的示例

// Using a buffer handler to batch log messages.

$bigQueryClient = new Google\Cloud\BigQuery\BigQueryClient();
$handler = new Garbetjie\Monolog\Handler\BigQueryHandler($bigQueryClient, 'dataset_name', 'table_name', $level = Logger::DEBUG, $bubble = true);
$handler = new Monolog\Handler\BufferHandler($handler, $bufferLimit = 10);
$logger = new Monolog\Logger('channel', [$handler]);

$logger->debug('message 1');
$logger->debug('message 2');
$logger->debug('message 3');

自定义字段

可以随日志字段一起发送额外的自定义字段。这些自定义字段可以按以下方式添加

// Using custom fields

$handler = new Garbetjie\Monolog\Handler\BigQueryHandler($bigQueryClient, 'dataset_name', 'table_name', $level = Logger::DEBUG, $bubble = true);

$handler->setCustomField('field_name', 'field_value');
// Or $handler->setCustomField(['name' => 'value', 'other_name' => 'other_value'])

$handler->removeCustomField('field_name');
// Or $handler->removeCustomField(['field_name', 'other_field_name']);

自定义字段值可以是任何可以被JSON编码的标量值,或者是以下值之一

  • callable: 可以传递任何callable,它将在日志记录发送到BigQuery之前执行。

映射字段

默认情况下,要插入的字段名称与日志记录结构相同。但是,如果您有与这些不同的BigQuery列名称,您可以映射日志记录字段名称到自己的列名称

$bigQueryClient = new Google\Cloud\BigQuery\BigQueryClient();
$handler = new Garbetjie\Monolog\Handler\BigQueryHandler($bigQueryClient, 'dataset_name', 'table_name', $level = Logger::DEBUG, $bubble = true);
$handler->setFieldMapping(['datetime' => 'logged_at']);  // The `datetime` log record field will now be saved to the `logged_at` column.

$logger->debug('message 1');