stackify/monolog

Stackify 用于记录 Monolog 的日志和错误

3.1.0 2024-05-20 05:54 UTC

README

Monolog 处理程序,用于将日志消息和异常发送到 Stackify。支持 Monolog >= 3.0.0。

对于 Monolog V1

使用 1.x 分支

对于 Monolog V2

使用 2.x 分支

安装

使用 composer require stackify/monolog "~2.0" 安装最新版本

使用 Linux 代理进行安装

这是推荐的安装选项,提供最佳的日志性能。

PHP

use Monolog\Logger;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$handler = new StackifyHandler('application_name', 'environment_name');
$logger = new Logger('logger');
$logger->pushHandler($handler);

Symfony

services:
    stackify_handler:
        class: "Stackify\\Log\\Monolog\\Handler"
        arguments: ["application_name", "environment_name"]
monolog:
    handlers:
        stackify:
            type: service
            id: stackify_handler

可选设置

服务器环境变量

  • 可以将服务器环境变量添加到错误日志消息元数据中。注意: 这将记录所有系统环境变量;如果以这种方式存储敏感信息(如密码或密钥),则请勿启用。
$handler = new StackifyHandler('application_name', 'environment_name', null, true); 

不使用 Linux 代理的安装

此选项不需要安装 Stackify 代理,因为它直接发送数据到 Stackify 服务。它批量收集日志条目,使用 exec 函数调用 curl,并立即发送数据到后台 [exec('curl ... &')]。这将对应用程序的性能产生最小影响,但需要在 PHP 脚本中调用 exec 的权限,并且可能会在网络问题发生时导致数据丢失。此传输方法在 Windows 上不起作用。要配置 ExecTransport,您需要传递环境名称和 API 密钥(许可证密钥)

PHP

use Stackify\Log\Transport\ExecTransport;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$transport = new ExecTransport('api_key');
$handler = new StackifyHandler('application_name', 'environment_name', $transport);
$logger = new Logger('logger');
$logger->pushHandler($handler);

Symfony

services:
    stackify_transport:
        class: "Stackify\\Log\\Transport\ExecTransport"
        arguments: ["api_key"]
    stackify_handler:
        class: "Stackify\\Log\\Monolog\\Handler"
        arguments: ["application_name", "environment_name", "@stackify_transport"]
monolog:
    handlers:
        stackify:
            type: service
            id: stackify_handler

可选配置

代理

  • ExecTransport 支持通过代理传输数据。使用 libcurl 格式 指定代理:<[协议://][用户:密码@]代理主机[:端口>
$transport = new ExecTransport($apiKey, ['proxy' => 'https://55.88.22.11:3128']);

Curl 路径

  • 对于 ExecTransport,可以指定 curl 目标路径。默认情况下,此选项设置为 'curl'。
$transport = new ExecTransport($apiKey, ['curlPath' => '/usr/bin/curl']);

服务器环境变量

  • 可以将服务器环境变量添加到错误日志消息元数据中。注意: 这将记录所有系统环境变量;如果以这种方式存储敏感信息(如密码或密钥),则请勿启用。
$handler = new StackifyHandler('application_name', 'environment_name', $transport, true); 

说明

如果可能,将异常对象传递给记录器以获取更多错误详细信息

try {
    $db->connect();
catch (DbException $ex) {
    // you may use any key name
    $logger->addError('DB is not available', ['ex' => $ex]);
}

附加配置

对于其他配置,您可以在 XML 或 PHP 文件配置中设置。附加选项的参考位于 stackify 记录器存储库 Stackify PHP Logger - 配置设置

传输级别

  • 这适用于所有传输 (ExecTransport, CurlTransport, AgentTransport, AgentSocketTransport)
use Monolog\Logger;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$config = array(
       'CaptureServerVariables' => false,
       'CaptureServerVariablesWhitelist' => '*',
       'CaptureServerVariablesBlacklist' => 'REMOTE_ADDR,SERVER_ADDR',
       ...
   );

$transport = new ExecTransport($apiKey, [
   'config' => $config
]);

$handler = new StackifyHandler('application_name', 'environment_name', $transport);
$logger = new Logger('logger');
$logger->pushHandler($handler);

处理程序级别

  • 这适用于当前 Monolog 处理程序
use Monolog\Logger;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$transport = new ExecTransport($apiKey); // Your selected transport (Can be null which defaults to AgentSocketTransport)
$logServerVariables = false; // Default
$config = array(
       'CaptureServerVariables' => false,
       'CaptureServerVariablesWhitelist' => '*',
       'CaptureServerVariablesBlacklist' => 'REMOTE_ADDR,SERVER_ADDR',
       ...
);

$handler = new StackifyHandler('application_name', 'environment_name', $transport, $logServerVariables, $config);
$logger = new Logger('logger');
$logger->pushHandler($handler);

处理程序级别选项

  • 包含通道
    • 这将包含记录器名称或为日志条目设置的通道。
use Monolog\Logger;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$transport = new ExecTransport($apiKey); // Your selected transport (Can be null which defaults to AgentSocketTransport)
$logServerVariables = false; // Default
$config = array(
       'IncludeChannel' => true,
       ...
);

$handler = new StackifyHandler('application_name', 'environment_name', $transport, $logServerVariables, $config);
$logger = new Logger('logger');
$logger->pushHandler($handler);
  • 包含上下文中的额外信息
    • 这将包含额外属性到上下文中(将额外合并到上下文)
use Monolog\Logger;
use Stackify\Log\Monolog\Handler as StackifyHandler;

$transport = new ExecTransport($apiKey); // Your selected transport (Can be null which defaults to AgentSocketTransport)
$logServerVariables = false; // Default
$config = array(
       'IncludeExtraInContext' => true,
       ...
);

$handler = new StackifyHandler('application_name', 'environment_name', $transport, $logServerVariables, $config);
$logger = new Logger('logger');
$logger->pushProcessor(function ($record) {
     if (empty($record['extra'])) {
       $record['extra'] = [];
     }
     $record['extra']['dummy'] = 1;
     return $record;
});
$logger->pushHandler($handler);

Symfony

services:
    stackify_transport:
        class: "Stackify\\Log\\Transport\\CurlTransport"
        arguments: ["api_key"]
# Square/Curly Brackets
    stackify_handler:
        class: "Stackify\\Log\\Monolog\\Handler"
        arguments: ["application_name", "environment_name", "@stackify_transport", false, { CaptureServerVariables: false, ... }]
# or
# Dash/Colon Space
    stackify_handler:
        class: "Stackify\\Log\\Monolog\\Handler"
        arguments:
            - "application_name"
            - "environment_name"
            - "@stackify_transport"
            - false
            - CaptureServerVariables: false
              CaptureServerWhitelist: "*"
              CaptureServerBlacklist: null
              
monolog:
    handlers:
        stackify:
            type: service
            id: stackify_handler

故障排除

如果传输不起作用,请尝试查看 vendor\stackify\logger\src\Stackify\debug\log.log 文件(如果它可用于写入)。错误也写入全局 PHP error_log。注意,ExecTransport 不会产生任何错误,但您可以将其切换到调试模式

$transport = new ExecTransport($apiKey, ['debug' => true]);

您还可以在 Logger 级别进行设置。设置 DebugDebugLogPath

$config = array(
        'DebugLogPath' => '/path/to/log.log',
        'Debug' => true
    );

$logger = new StackifyHandler('application_name', 'environment_name', $transport, $logServerVariables, $config);

许可证

版权所有 2019 Stackify, LLC。

本软件根据 Apache License,版本 2.0(以下简称“许可证”)许可;除非适用法律要求或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下网址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证下规定的权限和限制的具体语言,请参阅许可证。