stackify / logger
Stackify 为 PHP 提供日志和错误处理
Requires
- php: >= 7.1.0
- guzzlehttp/psr7: ^1.9.1 || ^2.4.5
- php-http/message: ^1.7
- php-http/message-factory: ^1.1
- php-http/socket-client: ^1.4 | ^2.0
- psr/http-message: ^1.0
- psr/log: ^1.0 | ^2.0 | ^3.0
Requires (Dev)
- phpunit/php-timer: ^1.0.6
- phpunit/phpunit: ^5
This package is not auto-updated.
Last update: 2024-09-23 14:27:23 UTC
README
Stackify PHP Logger
独立的 Stackify PHP PSR-3 日志记录器。
- 错误和日志概述: http://support.stackify.com/errors-and-logs-overview/
- 免费试用: http://www.stackify.com/sign-up/
PHP 日志框架集成
- Monolog 处理器: https://github.com/stackify/stackify-log-monolog
- log4php 追加器: https://github.com/stackify/stackify-log-log4php
安装
使用 composer require stackify/logger 安装最新版本
要求
- Stackify PHP Logger ^2.0 与 PHP 7.1 或更高版本兼容。
- Stackify PHP Logger ^1.0 与 PHP 5.3 或更高版本兼容。
使用 Linux 代理进行安装
这是推荐的安装选项,提供最佳的日志性能。
use Stackify\Log\Standalone\Logger; $logger = new Logger('application_name', 'environment_name');
不使用 Linux 代理进行安装
此选项不需要安装 Stackify 代理,因为它直接将数据发送到 Stackify 服务。它批量收集日志条目,使用 exec 函数调用 curl,并立即将数据发送到后台 [exec('curl ... &')]。这将对应用程序的性能影响最小,但需要在 PHP 脚本内部调用 exec 的权限,并且在出现任何网络问题时可能会导致数据丢失。此传输方法在 Windows 上不适用。要配置 ExecTransport,需要传递环境名称和 API 密钥(许可证密钥)
use Stackify\Log\Transport\ExecTransport; use Stackify\Log\Standalone\Logger; $transport = new ExecTransport('api_key'); $logger = new Logger('application_name', 'environment_name', $transport);
可选设置
代理
- 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']);
日志服务器环境变量
- 可以将服务器环境变量添加到错误日志消息元数据中。 注意: 这将记录所有系统环境变量;如果以这种方式存储敏感信息(如密码或密钥),请勿启用。
$logger = new Logger('application_name', 'environment_name', $transport, true);
配置设置
- 这允许用户覆盖日志器的默认设置(隐藏请求变量、会话、Cookie 或更新连接属性到不同的传输等。)
- 注意: 默认情况下,捕获原始 POST 数据
(例如 file_get_contents("php://input"))和$_POST变量是禁用的。- 要启用,可以将以下选项设置为
true CapturePostVariables-布尔型- 捕获$_POST变量CaptureRawPostData-布尔型- 捕获php://input流数据(例如 file_get_contents("php://input"))$config = array( 'CapturePostVariables' => true, 'CaptureRawPostData' => true, ... );
- 要启用,可以将以下选项设置为
- 注意: 对于
白名单/黑名单设置。任何为假的内容(null、false、array()等. - 参考php empty 函数检查)将被视为不跟踪- 不会处理任何变量数据。
日志器级别
$config = array( 'CaptureServerVariables' => false, 'CaptureServerVariablesWhitelist' => '*', 'CaptureServerVariablesBlacklist' => 'REMOTE_ADDR,SERVER_ADDR', ... ); $logger = new Logger('application_name', 'environment_name', $transport, true, $config);
传输级别
- 这适用于所有传输
(ExecTransport, CurlTransport, AgentTransport, AgentSocketTransport)
$config = array( 'CaptureServerVariables' => false, 'CaptureServerVariablesWhitelist' => '*', 'CaptureServerVariablesBlacklist' => 'REMOTE_ADDR,SERVER_ADDR', ... ); $transport = new ExecTransport($apiKey, [ 'config' => $config ]);
可用选项
服务器变量
CaptureServerVariables-布尔型- 捕获$_SERVER变量CaptureServerVariablesWhitelist-数组或以逗号分隔的字符串- 白名单$_SERVER属性CaptureServerVariablesBlacklist-数组或以逗号分隔的字符串- 隐藏$_SERVER属性(例如attribute => 'X-MASKED-X')
获取变量
CaptureGetVariables-布尔值- 捕获$_GET变量CaptureGetVariablesWhitelist-数组或以逗号分隔的字符串- 白名单$_GET属性CaptureGetVariablesBlacklist-数组或以逗号分隔的字符串- 隐藏$_GET属性(例如attribute => 'X-MASKED-X')
POST 变量
CapturePostVariables-布尔型- 捕获$_POST变量CapturePostVariablesWhitelist-数组或以逗号分隔的字符串- 白名单$_POST属性CapturePostVariablesBlacklist-数组或以逗号分隔的字符串- 隐藏$_POST属性(例如attribute => 'X-MASKED-X')
会话变量
CaptureSessionVariables-布尔值- 捕获$_SESSION变量CaptureSessionVariablesWhitelist-数组或以逗号分隔的字符串- 白名单$_SESSION属性CaptureSessionVariablesBlacklist-数组或以逗号分隔的字符串- 隐藏$_SESSION属性(例如attribute => 'X-MASKED-X')
错误头信息
CaptureErrorHeaders-布尔值- 捕获在$_SERVER变量中可用的HEADER属性CaptureErrorHeadersWhitelist-数组或以逗号分隔的字符串- 白名单$_SERVER中的HEADER属性CaptureErrorHeadersBlacklist-数组或以逗号分隔的字符串- 隐藏$_SERVER中的HEADER属性(例如attribute => 'X-MASKED-X')
错误Cookies
CaptureErrorCookies-布尔值- 捕获$_COOKIE变量CaptureErrorCookiesWhitelist-数组或以逗号分隔的字符串- 白名单$_COOKIE属性CaptureErrorCookiesBlacklist-数组或以逗号分隔的字符串- 隐藏$_COOKIE属性
捕获原始POST数据
CaptureRawPostData-布尔型- 捕获php://input流数据(例如 file_get_contents("php://input"))
调试设置
Debug-布尔值- 在记录器中启用 DEBUGDebugLogPath-字符串- 调试或错误期间生成的日志文件的合格路径
代理传输设置
Protocol-字符串- 协议可以是tcp或udpHost-字符串- 服务器主机名Port-数字- 端口SocketTimeoutConnect-数字- 连接请求超时SocketTimeoutWrite-数字- 连接写入超时SocketMaxConnectAttempts-数字- 连接尝试次数
代理套接字传输设置
DomainSocketPath-字符串- Stackify Agent unix 套接字路径
API或Curl执行套接字传输设置
ApiBaseUrl-字符串- Stackify API基本URLApiCallLogsEndpoint-字符串- Stackify API调用日志端点ApiMaxTimeout-数字- Stackify API调用最大超时ApiVersionHeader-字符串- Stackify API版本头
故障排除
如果传输不起作用,请尝试查看 vendor\stackify\logger\src\Stackify\debug\log.log 文件(如果它可供写入)。错误也会写入全局PHP 错误日志。请注意,ExecTransport根本不会产生任何错误,但您可以将其切换到调试模式
$transport = new ExecTransport($apiKey, ['debug' => true]);
您也可以将其设置为 Logger 级别。设置 Debug 和 DebugLogPath
$config = array( 'DebugLogPath' => '/path/to/log.log', 'Debug' => true ); $logger = new Logger('application_name', 'environment_name', $transport, true, $config);
真实用户监控(RUM)
真实用户监控会在脚本标签中注入 RUM JS,该标签负责捕获浏览器中 http 请求的信息。这种方法是手动的,需要配置。
用户体验度量(RUM) - 设置
/** Requires composer **/ $applicationName = 'Your Application Name'; $environment = 'YourEnvironment'; $rumKey = 'YourRumKey'; \Stackify\Utils\Rum::getInstance()->setupConfiguration( $applicationName, $environment, $rumKey );
用户体验度量(RUM) - 应用程序
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <?php echo \Stackify\Utils\Rum::getInstance()->insertRumScript(); ?> <title>Title</title> </head> ...
许可证
版权所有 2019 Stackify, LLC。
本软件遵循Apache License,版本2.0(以下简称“许可证”);除非符合许可证或书面同意,否则不得使用此文件。您可以在以下地址获得许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证具体规定的权限和限制,请参阅许可证。