疯狂工厂 / phalcon-loggers
Phalcon日志适配器,适用于Slack和Sentry。
1.0.0
2020-02-11 02:23 UTC
Requires
- php: >=7.0
- ext-json: *
- ext-phalcon: ^3.0
Requires (Dev)
- crazyfactory/slack: ^2.0.0
- mockery/mockery: @stable
- phalcon/ide-stubs: ^3.4
- php-http/guzzle6-adapter: ^2.0
- phpunit/phpunit: ^5.7.0
- sentry/sentry: ^2.2
Suggests
- crazyfactory/slack: To be able to use Slack logging.
- sentry/sentry: To be able to use the Sentry logging.
This package is not auto-updated.
Last update: 2024-09-21 10:56:11 UTC
README
一个配置可用的日志库集合,与Phalcon 3.x和PHP 7.x松散兼容。目前实现了以下适配器
Sentry
- 依赖于 sentry/sentry 包。
- 您需要运行
composer require sentry/sentry
- 可能需要根据 此处 的说明(见下面的 #installation 部分)要求
Raven_Autoloader
- 默认禁用,但如果定义了类
Raven_Client
,则处于活动状态。
Slack
- 自包含,开箱即用。
... 我们还计划添加更多!
安装
这是一个完全兼容composer的库。只需运行
$ composer require crazyfactory/phalcon-loggers
如果您没有使用composer的自动加载(即 require 'vendor/autoload.php'
)&/或只想使用Phalcon的本地自动加载器
$loader = new Phalcon\Loader; $loader->registerNamespaces([ 'CrazyFactory\\PhalconLogger' => '/path/to/vendor/crazyfactory/phalcon-loggers/src/', ])->register();
如果您还想使用Sentry
$ composer require sentry/sentry
如果您没有使用composer的自动加载,则可以按如下方式设置 Raven_
类的自动加载
require_once '/path/to/vendor/sentry/sentry/lib/Raven/Autoloader.php'; Raven_Autoloader::register();
使用方法
使用此库最简单快捷的方式是使用提供的 Service
$id = (new Phalcon\Security\Random)->uuid(); $di = new Phalcon\Di\FactoryDefault; (new CrazyFactory\PhalconLogger\Service)->register(null, $di); // If you already have `requestId` in config array/object you don't need to set it again. $di->getShared('logger')->setRequestId($id); $di->getShared('logger')->info('some text'); // Supports interpolation for keys wrapped in curly brace. $di->getShared('logger')->critical('some text {key}', ['key' => 'val']); // // Below examples assume that info level is allowed in config->slack->levels array. // // Mention an user in slack: $context = ['mentions' => 'slackbot', 'a' => 10]; $di->getShared('slack')->info('some text {a}', $context); // Customize channel, username, icon_emoji, icon_url via context: $context += [ 'username' => 'bot', 'channel' => '#general', 'icon_emoji' => ':monkey_face:', ]; $di->getShared('slack')->info('some other text {a}', $context); // Attachment: $context += [ 'attachment' => [ 'title' => 'Attachment title', 'text' => 'Attachment text', 'color' => 'good', ], ]; $di->getShared('slack')->info('yet other text {a} with attachment', $context);
有关详细信息和各种集成示例,请参阅 示例。还请参阅 API 部分。
配置
您可以以数组或文件的形式传递配置。日志记录器有自己的配置选项,但共享公共参数 requestId
和 environment
。以下是Slack和Sentry的典型配置示例
use Phalcon\Logger; $config = [ // The application name used in logs. Helps to distinguish &/or search. 'appName' => '', // Current application environment. 'environment' => 'prod', 'requestID' => null, 'sentry' => [ // The login information for Sentry. If one of the values is empty the logging is suppressed silently. 'credential' => [ 'key' => '', 'secret' => '', 'projectId' => '', ], // The options for Raven_Client. See https://docs.sentry.io/clients/php/config/#available-settings 'options' => [ 'curl_method' => 'sync', 'prefixes' => [], 'app_path' => '', 'timeout' => 2, ], // Sentry will log errors/exceptions when the application environment set above is one of these. 'environments' => ['prod', 'staging'], // The log levels which are forwarded to sentry. 'levels' => [Logger::EMERGENCY, Logger::CRITICAL, Logger::ERROR], // These exceptions are not reported to sentry. 'dontReport' => [], ], 'slack' => [ // If webhook url is missing the logging is suppressed silently. 'webhookUrl' => '', // Slack will log messages when the application environment set above is one of these. 'environments' => ['prod', 'dev'], // Curl method can be 'sync' or 'exec' (sync uses php curl_*, exec runs in background). 'curlMethod' => 'sync', // HTTP headers to be appended to request. 'headers' => [], // The log levels which are forwarded to slack. 'levels' => [Logger::SPECIAL, Logger::CUSTOM], ], ]; $di = new Phalcon\Di\FactoryDefault; // Register the loggers with the config: $di->setShared('sentry', function () use ($config) { return new CrazyFactory\PhalconLogger\Adapter\Sentry($config); }); $di->setShared('slack', function () use ($config) { return new CrazyFactory\PhalconLogger\Adapter\Slack($config); }); // OR you could just use supplied `Service`: (new CrazyFactory\PhalconLogger\Service)->register($config, $di);
API
所有日志记录器都继承自基Phalcon日志 适配器,因此它们自动继承基的公共可调用的API。此外,日志记录器还可以公开一些可用于直接调用的API。
Sentry
Sentry日志记录器具有以下公共API
- addCrumb(string $message, string $category = 'default', array $data = [], int $type = null)
$di->getShared('sentry')->addCrumb('User has just logged in');
- setTag(string $key, string $value)
$di->getShared('sentry')->setTag('name', 'value')->setTag('another', 'another-value');
- setUserContext(array $context)
// you can also use current user from DI if you have one $di->getShared('sentry')->setUserContext(['id' => 1, 'username' => 'someone', 'email' => 'bob@example.com']);
- setExtraContext(array $context)
$di->getShared('sentry')->setExtraContext(['arbitrary_key' => 'arbitrary_value', 'arbitrary_key_2', 'arbitrary_value_2']);
- getLastEventId()
$di->getShared('sentry')->getLastEventId();
- logException(\Throwable $exception, array $context = [], int $type = null)
try { $app->handle(); } catch (\Throwable $e) { $di->getShared('sentry')->logException($e); // However it is advisable to just use logException of the logger collection // so that all the registered loggers are notified of the exception to do the needful. $di->getShared('logger')->logException($e); }