arnapou/message-templates

库 - messagetemplates.org的PHP实现

v1.0.1 2024-09-12 21:29 UTC

This package is auto-updated.

Last update: 2024-09-13 08:14:54 UTC


README

pipeline coverage

messagetemplates.org的PHP实现 (GitHub)。

安装

composer require arnapou/message-templates

packagist 👉️ arnapou/message-templates

摘要

🔗 规范详细内容

一个语言无关的规范,用于1)捕获和2)以人类友好且机器可读的格式渲染结构化日志事件。

Message Templates

使用此PHP实现的示例

消息模板记录器

这是一个按照规范描述的记录器,它执行以下操作:

  • 捕获
  • 渲染

由于PSR-3的签名不同,我们使用受PSR-3 LoggerInterface启发的 MessageTemplateLoggerInterface

use Arnapou\MessageTemplates\MessageTemplateLogger;

$logger = new MessageTemplateLogger($psrLogger);
$logger->emergency('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->alert('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->critical('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->error('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->warning('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->notice('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->info('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->debug('User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');
$logger->log($level, 'User {username} logged in from {ip_address}', 'Alice', '123.45.67.89');

消息模板PSR-3记录器

这是一个具有消息模板功能的纯PSR-3 LoggerInterface装饰器。

它只执行规范中的“渲染”部分,使用PSR-3上下文作为捕获的一组属性进行渲染。

你可以在上下文中发送比模板所需更多的元素,但不能发送更少的元素。

这类似于消息验证阶段(即使你不打算渲染模板)。

这个记录器有一个注入的 HoleRenderingInterface 允许你在PSR-3装饰的记录器实现以另一种方式渲染对象之前,自定义对象 消息的渲染。

use Arnapou\MessageTemplates\MessageTemplatePsrLogger;

$logger = new MessageTemplatePsrLogger($psrLogger);
$logger->emergency('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->alert('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->critical('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->error('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->warning('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->notice('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->info('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->debug('User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);
$logger->log($level, 'User {username} logged in from {ip_address}', ['username'=> 'Alice', 'ip_address' => '123.45.67.89']);

直接使用

所有内容都在lib中正确解耦。

因此,你可以按自己的意愿操纵模板消息。

use Arnapou\MessageTemplates\MessageTemplate;
use Arnapou\MessageTemplates\Hole\DefaultImplementation;

$template = new MessageTemplate('User {username} logged in from {$ip_address:[%s]}');

$template->simplifiedTemplate();
// "User {username} logged in from {ip_address}"

foreach($template->combine('Alice', '123.45.67.89') as [$segment, $value]) {
    // ["User ", null]
    // [<Hole Object, name: username>, 'Alice']
    // [" logged in from ", null]
    // [<Hole Object, name: ip_address>, '123.45.67.89']
}

$holeCapturing = new DefaultImplementation();
$template->capture($holeCapturing, 'Alice', '123.45.67.89');
// ['username' => 'Alice', 'ip_address' => '123.45.67.89']

$holeRendering = new DefaultImplementation();
$template->render($holeCapturing, ['username' => 'Alice', 'ip_address' => '123.45.67.89']);
// "User Alice logged in from [123.45.67.89]"

$template->captureAndRender($holeCapturing, $holeRendering, 'Alice', '123.45.67.89');
// "User Alice logged in from [123.45.67.89]"

自定义捕获和渲染

创建你自己的实现

你可以

此库有一个DefaultImplementation,这应该满足你大多数常见需求。

PHP版本

日期参考8.38.2
10/09/20241.x,主要××