stackify / monolog
Stackify 用于记录 Monolog 的日志和错误
Requires
- php: >=8.1
- monolog/monolog: ~3.0
- stackify/logger: ~1.7 || ~2.0
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.4
- phpunit/phpunit: ^10.1
This package is not auto-updated.
Last update: 2024-09-23 14:07:58 UTC
README
Monolog 处理程序,用于将日志消息和异常发送到 Stackify。支持 Monolog >= 3.0.0。
对于 Monolog V1
使用 1.x 分支
对于 Monolog V2
使用 2.x 分支
- 错误和日志概述: http://support.stackify.com/errors-and-logs-overview/
- 免费试用: http://www.stackify.com/sign-up/
安装
使用 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
级别进行设置。设置 Debug
和 DebugLogPath
$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
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证下规定的权限和限制的具体语言,请参阅许可证。