geekyhomz/monolog-enricher

Monolog 组件以启用 New Relic 日志 | 分支

3.0.0 2023-08-03 11:06 UTC

This package is auto-updated.

Last update: 2024-10-03 13:47:37 UTC


README

Latest Stable Version Latest Unstable Version CircleCI License

这是一个与 Laravel 10 兼容的 Monolog 分支版本

此包提供了将 PHP 应用程序与 Monolog 集成到 New Relic 日志 所需的组件。

存档通知

截至 2023 年 6 月启用 New Relic 日志的 Monolog 组件 项目已存档。New Relic PHP 代理(版本 10.3.0 及以上)支持 Monolog 2 和 Monolog 3 的日志转发,并自动支持,这是捕获 PHP 应用程序日志输出的推荐方式。了解更多关于自动日志转发的信息

安装

组件

提供了三个组件

  1. 一个 处理器,它将日志记录直接从 Monolog 传递到 New Relic 日志。

  2. 一个 处理器。这可以与 New Relic PHP 代理 结合使用,为日志记录添加 链接元数据,允许您使用 上下文日志 将日志记录与 New Relic 平台上的相关数据进行关联。

  3. 一个 格式化程序,它扩展了 Monolog 提供的 JsonFormatter,以从 处理器 获取装饰过的日志记录,并以 New Relic 日志和其支持的插件所期望的 简化 JSON 主体结构 输出。

有关如何将这些组件与您的应用程序集成的详细信息,请参阅下面的入门指南

要求

  • Monolog,版本 1 或 2。
  • PHP 5.5.0 或更高版本,尽管强烈推荐使用目前支持的 PHP 版本。

要使用 处理器,您还需要以下内容

要启用 上下文日志 功能,您还需要

安装

本软件包可在 Packagist 上找到 [Packagist](https://packagist.org.cn/packages/newrelic/monolog-enricher),并应使用 Composer 进行安装。

composer require geekyhomz/monolog-enricher

入门指南

直接将日志发送到 New Relic 日志

使用此软件包最简单的方法是使用 ProcessorHandler 将数据直接发送到 New Relic 日志。

<?php

use Monolog\Logger;
use NewRelic\Monolog\Enricher\{Handler, Processor};

$log = new Logger('log');
$log->pushProcessor(new Processor);
$log->pushHandler(new Handler);

$log->info('Hello, world!');

如果已安装 New Relic PHP 代理,则 Handler 应能从 PHP 代理检测到 许可证密钥,并且 Processor 将自动将链接元数据添加到日志记录中。

如果您不使用 New Relic APM,可以跳过推送处理器:Handler 可以独立运行。

选择性发送日志记录

默认情况下,使用 Handler 意味着每个日志记录都会向 New Relic 日志 API 发起 HTTP 请求。如果记录了大量的日志,这可能会给您的应用程序增加开销。

与大多数内置的 Monolog 处理器一样,Handler 类允许指定一个最小 日志级别:低于给定级别的日志记录将不会发送到 New Relic。因此,如果您不想看到低于 WARNING 级别的日志,可以将 Handler 的实例化修改如下

<?php
// ...

$log->pushHandler(new Handler(Logger::WARNING));

缓冲日志记录以提升性能

避免对每个发送的日志消息都发起 HTTP 请求的另一种方法是使用 Monolog 内置的 BufferHandler 批量日志消息,然后在请求结束时发送一条消息。

<?php

use Monolog\Handler\BufferHandler;
use Monolog\Logger;
use NewRelic\Monolog\Enricher\{Handler, Processor};

$log = new Logger('log');
$log->pushProcessor(new Processor);
$log->pushHandler(new BufferHandler(new Handler));

$log->info('Hello, world!');

手动指定许可证密钥和/或主机

Handler 类提供了设置将使用的许可证密钥或 New Relic 日志 API 主机的方法。如果未安装 New Relic PHP 代理,或者您希望记录到不同的账户或地区,这可能很有用。

<?php
// ...

$handler = new Handler;
$handler->setHost('log-api.eu.newrelic.com');
$handler->setLicenseKey('0123456789abcdef0123456789abcdef01234567');
$log->pushHandler($handler);

与现有日志工具集成

如果您已经配置了日志工具以将日志发送到 New Relic 日志(如 Fluentd、AWS CloudWatch 或 New Relic 日志支持的 其他日志工具),则可能更喜欢使用 ProcessorFormatter 将日志发送到该工具,而不是使用 Handler 直接将日志发送到 New Relic。

例如,如果您的日志工具配置为在 stderr 上拾取 NDJSON,则可以按以下方式配置记录器

<?php

use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use NewRelic\Monolog\Enricher\{Formatter, Processor};

$log = new Logger('log');
$log->pushProcessor(new Processor);

$handler = new StreamHandler('php://stderr');
$handler->setFormatter(new Formatter);
$log->pushHandler($handler);

$log->info('Hello, world!');

有关将您的日志工具配置为向 New Relic 日志发送日志的更多信息,请参阅 New Relic 文档

贡献

截至 2023 年 6 月,启用 New Relic 日志的 Monolog 组件 项目已存档,仅供克隆使用。我们鼓励您在您的分支中进行实验,但请注意,没有维护团队或支持。

关于漏洞的说明

正如我们在安全策略中所指出的,New Relic致力于保护客户及其数据的安全和隐私。我们相信,通过安全研究人员进行协调披露并与安全社区互动是实现我们安全目标的重要手段。

如果您认为您在这个项目或New Relic的任何产品或网站上发现了安全漏洞,我们欢迎并非常感谢您通过HackerOne向我们报告。

感谢所有贡献者!没有您的贡献,这个项目今天不会成为这个样子。

设置开发环境

此项目的开发依赖关系由Composer管理,应通过Composer进行安装

composer install

编码规范

本项目遵循PSR-12规范,软行长度限制为80个字符。

使用PHP_CodeSniffer来确保一致性。您可以通过以下Composer脚本来运行phpcs检查当前代码:

composer coding-standard-check

或者,您可以使用phpcbf自动修复大多数错误

composer coding-standard-fix

提交修复时,请确保已将相应的条目添加到变更日志中。

测试

运行单元测试

本项目使用PHPUnit 4,这是最后一个支持PHP 5.3的PHPUnit版本。

您可以通过Composer运行测试套件

composer test

如果可用phpdbg,您还可以在运行测试套件的同时生成代码覆盖率报告

composer test-coverage

这将生成一个HTML覆盖率报告,写入到coverage/index.html

运行集成测试

您还可以通过Composer运行针对Monolog 1和2的集成测试套件

composer integration

有关这些测试的更多信息,请参阅tests/integration README

隐私

在New Relic,我们非常重视您的隐私和您信息的安全性,并致力于保护您的信息。我们必须强调不要在公共论坛上分享个人数据的重要性,并要求所有用户清除日志和诊断信息中的敏感信息,无论这些信息是个人、专有还是其他。

我们定义“个人信息”为与已识别或可识别的个人相关的任何信息,例如,您的姓名、电话号码、邮政编码或邮编、设备ID、IP地址和电子邮件地址。

有关更多信息,请查阅New Relic的一般数据隐私声明

许可证

newrelic-monolog-logenricher-php遵循Apache 2.0许可证。

资源