stackify/logger

Stackify 为 PHP 提供日志和错误处理

2.0.0 2024-05-09 13:18 UTC

README

PHP version

Stackify PHP Logger

独立的 Stackify PHP PSR-3 日志记录器。

PHP 日志框架集成

安装

使用 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,
              ...
      );
  • 注意: 对于 白名单/黑名单 设置。任何 为假 的内容(nullfalsearray() 等. - 参考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 - 布尔值 - 在记录器中启用 DEBUG
  • DebugLogPath - 字符串 - 调试或错误期间生成的日志文件的合格路径

代理传输设置

  • Protocol - 字符串 - 协议可以是 tcpudp
  • Host - 字符串 - 服务器主机名
  • Port - 数字 - 端口
  • SocketTimeoutConnect - 数字 - 连接请求超时
  • SocketTimeoutWrite - 数字 - 连接写入超时
  • SocketMaxConnectAttempts - 数字 - 连接尝试次数

代理套接字传输设置

  • DomainSocketPath - 字符串 - Stackify Agent unix 套接字路径

API或Curl执行套接字传输设置

  • ApiBaseUrl - 字符串 - Stackify API基本URL
  • ApiCallLogsEndpoint - 字符串 - 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 级别。设置 DebugDebugLogPath

$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

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