graylog2/gelf-php

一个用于将日志消息发送到兼容GELF的后端(如Graylog2)的PHP实现。

2.0.1 2023-05-23 14:45 UTC

README

Build Status Code Coverage Scrutinizer Quality Score

一个用于将日志文件发送到兼容GELF的后端(如Graylog2)的PHP实现。该库符合PSR标准,包括结构(4)、编码风格(12)和日志记录(3)。

它基于原始的Graylog2 gelf-phpmlehner的分支进行扩展。

原始graylog2/gelf-php的稳定版本和弃用

此实现于2013年12月19日成为官方PHP GELF库,并现在以graylog2/gelf-php发布。同时,旧库被弃用,建议升级。

由于旧库从未发布过稳定版本,我们决定将其保留为v0.1版本。这意味着:如果您有一个基于弃用库的项目,但没有时间升级到版本1.0,我们建议您将composer.json更改如下

    "require": {
       // ...
       "graylog2/gelf-php": "0.1.*"
       // ...
    }

运行额外的composer update后,所有内容应该按预期工作。

关于5.6之前版本的PHP的说明

我尽量保持与旧版本的向后兼容性,但到了2021年,处理PHP 5.3.3 - 5.5.latest的依赖管理痛苦已经不再可行。它们已经停用多年了。

如果您在5.6以下版本中遇到困难,可以使用gelf-php版本1.6.5.

我故意没有从1.x到2.x进行符合semver的版本增加。

用法

推荐通过composer安装

通过运行composer require graylog2/gelf-php或将它手动添加到composer.json中,将gelf-php添加到composer.json

"require": {
   // ...
   "graylog2/gelf-php": "~1.5"
   // ...
}

重新安装依赖:composer install

示例

有关使用示例,请访问/examples

静默连接和传输错误

在许多情况下,项目会遇到不想为日志错误引发异常的情况。由于标准传输(如Udp、Tcp和Http)可能会产生一些噪音,如fwrite/fopen错误,gelf-php提供了IgnoreErrorTransportWrapper类。这个类可以装饰任何AbstractTransport,并将静默所有异常。

如何在实践中应用这一方法,可以在高级示例中看到。

如果您将gelf-php与monolog/symfony一起使用,以下代码片段可以帮助您正确设置日志后端。

假设您有一个典型的monolog配置

monolog:
  handlers:
    graylog:
      type: service
      id: monolog.gelf_handler
      level: debug

您只需正确定义symfony-service gelf-handler

services:
  monolog.gelf_handler:
    class: Monolog\Handler\GelfHandler
    arguments:
        - @gelf.publisher
        - 'warning' #monolog config is ignored with custom service level has to be redefined here (default : debug), you should probably use parameters eg: '%gelf_level%'
    
  gelf.publisher:
    class: Gelf\Publisher
    arguments: [@gelf.ignore_error_transport]
    
  gelf.ignore_error_transport:
    class: Gelf\Transport\IgnoreErrorTransportWrapper
    arguments: [@gelf.transport]
    
  gelf.transport:
    class: Gelf\Transport\UdpTransport # or Tcp, Amp, Http,...
    arguments: [] # ... whatever is required

HHVM

虽然HHVM受到支持并已进行测试,但仍有一些需要注意的限制

  • 流上下文支持非常有限(截至2014年),特别是关于SSL,许多用例可能无法按预期(或根本无法)工作。
  • fwrite的行为略有不同

当在HHVM上运行时,默认会跳过失败的单元测试。它们还都标注了@group hhvm-failures。您可以通过在环境中设置FORCE_HHVM_TESTS=1来强制运行这些失败测试。因此,您可以通过运行以下命令来具体检查HHVM失败的状况:

FORCE_HHVM_TESTS=1 hhvm vendor/bin/phpunit --group hhvm-failures

许可证

该库使用MIT许可证。有关详细信息,请参阅LICENSE文件。

开发与贡献

欢迎您修改、扩展和修复所有内容。:-)如果您有任何问题/建议等,您可以通过Twitter(@bzikarsky)或freenode#graylog2向我发消息。

工具

  1. composer,最好以系统范围内的composer安装
  2. PHPUnit
  3. 可选:PHP_CodeSniffer用于PSR-X兼容性检查

步骤

  1. 克隆仓库并进入:git clone [email protected]:bzikarsky/gelf-php && cd gelf-php
  2. 安装依赖:composer install
  3. 运行单元测试:vendor/bin/phpunit
  4. 检查PSR兼容性:vendor/bin/phpcs --standard=PSR2 src tests examples