mvf-tech / system_logger
用于执行DataDog和系统日志的包
Requires
- php: ^7.1|^8.0
- graze/dog-statsd: ^1.0
- lstrojny/functional-php: ^1.17
Requires (Dev)
- phpspec/phpspec: ^5.1
This package is auto-updated.
Last update: 2024-09-27 17:04:01 UTC
README
用于执行DataDog和系统日志的包
发布版本
安装和配置
- 运行
composer require mvf-tech/system_logger
来安装此包 - 您还需要设置
DATADOG_PROJECT_NAME
和DATADOG_SERVICE_NAME
环境变量
基本使用
use MVF\SystemLogger\Reporters\Remotes\DataDog\DataDog; use MVF\SystemLogger\Reporters\Host\CommandLine; use MVF\SystemLogger\SystemLogger; $logger = new SystemLogger(); $logger->info( ["some_kind_of_tag", "key" => "another_tag"], "message", new CommandLine(), DataDog::histogram("metric_name_suffix", 2) );
目前有两种类型的报告器可用,即上面的例子中的host
报告器和remote
报告器。例如,DataDog.histogram(...)
。host
报告器用于记录消息,这些报告器不接收标签列表,因此无法对其执行任何操作。remote
报告器用于创建更复杂的日志,它们只接收标签列表,消息作为"message" => "the message"
附加到标签列表中。您可以通过实现HostLogInterface
或RemoteLogInterface
来创建自己的报告器,关于这方面的更多信息稍后介绍。
SystemLogger
包含
use MVF\SystemLogger\SystemLogger;
方法
-
->info(array $tags, string $message, (HostLogInterface|RemoteLogInterface) ...$loggers)
-
->warning(array $tags, string $message, (HostLogInterface|RemoteLogInterface) ...$loggers)
-
->error(array $tags, string $message, (HostLogInterface|RemoteLogInterface) ...$loggers)
系统日志用作中央存储单元,它本身不执行任何日志记录,而是负责消息处理和减少代码重复,因为相同的标签和消息传递给所有提供的报告器。
默认标签
以下是在提供的列表中附加的默认标签。
info
、warning
或error
之一将根据调用的系统日志函数附加。
消息占位符
有两种类型的消息占位符:tag
和reporter
。
$logger->info( [ "name" => "Bob" // tag key name ], "There are :1 messages from :name", new CommandLine(), // reporter index 0 DataDog::histogram("messages", 2), // reporter index 1 ... // reporter index ... );
tag
占位符通过一个冒号(:)后跟您的一个标签的键来识别,在上面的例子中:name
是一个有效的tag
。例如,reporter
占位符通过冒号(:)后跟您的一个报告器的索引来识别,在上面的例子中:1
将被替换为DataDog.histogram("messages", 2)
的值,在这种情况下将是2
。
#####注意
:0
不会被替换,因为CommandLine
实现了HostLogInterface
,而主机报告器没有任何返回值。
默认报告器
这些负责实际的信息记录。目前有两个内置的默认报告器:CommandLine
和DataDog
。
CommandLine
这是一个基本的报告器,它将简单地将消息输出到标准输出。
DataDog
包含
use MVF\SystemLogger\Reporters\Remotes\DataDog\DataDog;
方法
::gauge(string $suffix, int $value): Gauge
::histogram(string $suffix, int $value, float $sample_rate = 1.0): Histogram
::time(string $suffix, (float|callable) $time): Time
::unique(string $suffix, int $value): Unique
suffix
是您 DataDog 指标名称的最后一部分。所有 DataDog 指标名称将组成 DATADOG_PROJECT_NAME.suffix
,其中 DATADOG_PROJECT_NAME
从环境变量中加载,如果这些变量未设置,则您的指标名称的起始部分将默认为 notset.suffix
。此外,所有 DataDog 日志都将附带额外的标签 DATADOG_SERVICE_NAME
,该标签也从环境变量中加载,如果该变量未设置,则默认值为 notset
。
自定义报告器
您可以通过创建一个类并分别实现 HostLogInterface
或 RemoteLogInterface
来创建自己的 host
或 remote
报告器。
HostLogInterface
包含
use MVF\SystemLogger\HostLogInterface;
方法
-
->info(string $message): \Exception|null
: 应使用信息严重性记录日志。 -
->warning(string $message): \Exception|null
: 应使用警告严重性记录日志。 -
->error(string $message): \Exception|null
: 应使用错误严重性记录日志。
每个方法接收带有替换 占位符
的 message
。如果在报告器中抛出异常,则应捕获并返回它,系统记录器将在执行所有其他日志后重新抛出它。Laravel 标准输出报告器的示例可以在 此处 找到。
RemoteLogInterface
包含
use MVF\SystemLogger\RemoteLogInterface;
方法
-
->send(string[] $tags): \Exception|null
:tags
数组始终至少包含以下值[ "<info|warning|error>", "message" => "<message>", <DATADOG_SERVICE_NAME> ]
。如果在报告器中抛出异常,则应捕获并返回它,系统记录器将在执行所有其他日志后重新抛出它。 -
->getValue(): string|int
: 如果您的远程报告器有一个可能返回的值,则此函数应返回它,否则返回字符串NOT_IMPLEMENTED
。