samsonasik/error-hero-module
Composer 安装命令:
composer require samsonasik/error-hero-module
包简介
A Hero for your Laminas and Mezzio application to trap php errors & exceptions
关键字:
README 文档
README
This is README for version ^7.0 which bump laminas-diactoros to ^3.8 and bump doctrine-orm-module to ^6.3, and only support Laminas Mvc version 3 and Mezzio version 3 with php ^8.3
For version ^6.0, you can read at version 6 readme which only support Laminas Mvc version 3 and Mezzio version 3 with php ^8.2.
For version ^5.0, you can read at version 5 readme which only support Laminas Mvc version 3 and Mezzio version 3 with php ^8.1.
Introduction
ErrorHeroModule is a module for Error Logging (DB and Mail) your Laminas Mvc 3 Application, and Mezzio 3 for Exceptions in 'dispatch.error' or 'render.error' or during request and response, and PHP E_* Error.
Features
- Save to DB with Db Writer Adapter.
- Log Exception (dispatch.error and render.error) and PHP Errors in all events process.
- Support excludes PHP E_* Error (eg: exclude E_USER_DEPRECATED or specific E_USER_DEPRECATED with specific message) in config settings.
- Support excludes PHP Exception (eg: Exception class or classes that extends it or specific exception class with specific message) in config settings.
- Handle only once log error for same error per configured time range.
- Set default page (web access) or default message (console access) for error if configured 'display_errors' = 0.
- Set default content when request is XMLHttpRequest via 'ajax' configuration.
- Set default content when there is no template service via 'no_template' configuration (Mezzio 3).
- Provide request information ( http method, raw data, body data, query data, files data, cookie data, and ip address).
- Send Mail
- many receivers to listed configured email
- with include $_FILES into attachments on upload error (configurable to be included or not).
Installation
1. Import the following SQL for Mysql
DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `type` int(11) NOT NULL, `event` text NOT NULL, `url` varchar(2000) NOT NULL, `file` varchar(2000) NOT NULL, `line` int(11) NOT NULL, `error_type` varchar(255) NOT NULL, `trace` text NULL, `request_data` text NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
If you use other RDBMS, you may follow the
logtable structure above.
2. Setup your Laminas\Db\Adapter\AdapterInterface service or your Doctrine\ORM\EntityManager service config
You can use 'db' (with Laminas\Db) config or 'doctrine' (with DoctrineORMModule) config that will be transformed to be usable with Laminas\Log\Writer\Db.
<?php // config/autoload/local.php return [ 'db' => [ 'username' => 'mysqluser', 'password' => 'mysqlpassword', 'driver' => 'pdo_mysql', 'database' => 'mysqldbname', 'host' => 'mysqlhost', 'driver_options' => [ \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', ], ], ];
OR
<?php // config/autoload/local.php return [ 'doctrine' => [ 'connection' => [ 'orm_default' => [ 'driverClass' => 'Doctrine\DBAL\Driver\PDO\MySql\Driver', 'params' => [ 'user' => 'mysqluser', 'password' => 'mysqlpassword', 'dbname' => 'mysqldbname', 'host' => 'mysqlhost', 'port' => '3306', 'driverOptions' => [ \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', ], ], ], ], ] ];
If you use other RDBMS, you may configure your own
dbordoctrineconfig.
3. Require this module uses composer.
composer require samsonasik/error-hero-module
4. Copy config
a. For Laminas Mvc application, copy error-hero-module.local.php.dist config to your local's autoload and configure it
| source | destination |
|---|---|
| vendor/samsonasik/error-hero-module/config/error-hero-module.local.php.dist | config/autoload/error-hero-module.local.php |
Or run copy command:
cp vendor/samsonasik/error-hero-module/config/error-hero-module.local.php.dist config/autoload/error-hero-module.local.php
b. For Mezzio application, copy mezzio-error-hero-module.local.php.dist config to your local's autoload and configure it
| source | destination |
|---|---|
| vendor/samsonasik/error-hero-module/config/mezzio-error-hero-module.local.php.dist | config/autoload/mezzio-error-hero-module.local.php |
Or run copy command:
cp vendor/samsonasik/error-hero-module/config/mezzio-error-hero-module.local.php.dist config/autoload/mezzio-error-hero-module.local.php
When done, you can modify logger service named ErrorHeroModuleLogger and error-hero-module config in your's local config:
<?php // config/autoload/error-hero-module.local.php or config/autoload/mezzio-error-hero-module.local.php use Laminas\Db\Adapter\AdapterInterface; return [ 'log' => [ 'ErrorHeroModuleLogger' => [ 'writers' => [ [ 'name' => 'db', 'options' => [ 'db' => AdapterInterface::class, 'table' => 'log', 'column' => [ 'timestamp' => 'date', 'priority' => 'type', 'message' => 'event', 'extra' => [ 'url' => 'url', 'file' => 'file', 'line' => 'line', 'error_type' => 'error_type', 'trace' => 'trace', 'request_data' => 'request_data' ], ], 'formatter' => [ 'name' => 'db', 'options' => [ 'dateTimeFormat' => 'Y-m-d H:i:s', ], ], ], ], ], ], ], 'error-hero-module' => [ // it's for the enable/disable the logger functionality 'enable' => true, // default to true, if set to true, then you can see sample: // 1. /error-preview page ( ErrorHeroModule\Controller\ErrorPreviewController ) // 2. errorheromodule:preview command ( ErrorHeroModule\Command\Preview\ErrorPreviewConsoleCommand ) via // php public/index.php error-preview // // for Mezzio ^3.0.0, the disable error-preview page is by unregister 'error-preview' from config/routes // // // otherwise(false), you can't see them, eg: on production env. 'enable-error-preview-page' => true, 'display-settings' => [ // excluded php errors ( http://www.php.net/manual/en/errorfunc.constants.php ) 'exclude-php-errors' => [ // can be specific error \E_USER_DEPRECATED, // can be specific error with specific message [\E_WARNING, 'specific error message'], ], // excluded exceptions 'exclude-exceptions' => [ // can be an Exception class or class extends Exception class \App\Exception\MyException::class, // can be specific exception with specific message [\RuntimeException::class, 'specific exception message'], // or specific Error class with specific message [\Error::class, 'specific error message'], ], // show or not error 'display_errors' => 0, // if enable and display_errors = 0, the page will bring layout and view 'template' => [ // non laminas-view (plates, twig) for Mezzio not need a layout definition // as layout defined in the view 'layout' => 'layout/layout', 'view' => 'error-hero-module/error-default' ], // for Mezzio, when container doesn't has \Mezzio\Template\TemplateRendererInterface service // if enable, and display_errors = 0, then show a message under no_template config 'no_template' => [ 'message' => <<<json { "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Internal Server Error", "status": 500, "detail": "We have encountered a problem and we can not fulfill your request. An error report has been generated and sent to the support team and someone will attend to this problem urgently. Please try again later. Thank you for your patience." } json ], // if enable and display_errors = 0, the console will bring message for laminas-mvc 'console' => [ 'message' => 'We have encountered a problem and we can not fulfill your request. An error report has been generated and sent to the support team and someone will attend to this problem urgently. Please try again later. Thank you for your patience.', ], // if enable, display_errors = 0, and request XMLHttpRequest // on this case, the "template" key will be ignored. 'ajax' => [ 'message' => <<<json { "type": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html", "title": "Internal Server Error", "status": 500, "detail": "We have encountered a problem and we can not fulfill your request. An error report has been generated and sent to the support team and someone will attend to this problem urgently. Please try again later. Thank you for your patience." } json ], ], 'logging-settings' => [ // time range for same error, file, line, url, message to be re-logged // in seconds range, 86400 means 1 day 'same-error-log-time-range' => 86400, ], 'email-notification-settings' => [ // set to true to activate email notification on log error event 'enable' => false, // Laminas\Mail\Message instance registered at service manager 'mail-message' => 'YourMailMessageService', // Laminas\Mail\Transport\TransportInterface instance registered at service manager 'mail-transport' => 'YourMailTransportService', // email sender 'email-from' => 'Sender Name <sender@host.com>', // to include or not $_FILES on send mail 'include-files-to-attachments' => true, 'email-to-send' => [ 'developer1@foo.com', 'developer2@foo.com', ], ], ], // ... ];
5. Lastly, enable it
a. For Laminas Mvc application
// config/modules.config.php or config/application.config.php return [ 'Application', 'ErrorHeroModule', // <-- register here ],
b. For Mezzio application
For laminas-mezzio-skeleton ^3.0.0, you need to open config/pipeline.php and add the ErrorHeroModule\Middleware\Mezzio::class middleware after default ErrorHandler::class registration:
$app->pipe(ErrorHandler::class); $app->pipe(ErrorHeroModule\Middleware\Mezzio::class); // here
and also add error-preview routes in config/routes.php (optional) :
// for use laminas-router $app->get('/error-preview[/:action]', ErrorHeroModule\Middleware\Routed\Preview\ErrorPreviewAction::class, 'error-preview'); // for use FastRoute $app->get('/error-preview[/{action}]', ErrorHeroModule\Middleware\Routed\Preview\ErrorPreviewAction::class, 'error-preview');
to enable error preview page. To disable error preview page, just remove it from routes.
Give it a try!
Web Access
| URl | Preview For |
|---|---|
| http://yourlaminasormezzioapp/error-preview | Exception |
| http://yourlaminasormezzioapp/error-preview/error | Error |
| http://yourlaminasormezzioapp/error-preview/warning | PHP E_WARNING |
| http://yourlaminasormezzioapp/error-preview/fatal | PHP Fatal Error |
You will get the following page if display_errors config is 0:
Console Access
You can use this module in
laminas-cli, you can install:
composer require laminas/laminas-cli --sort-packages
then you can see the error-preview console:
| Command | Preview For |
|---|---|
| vendor/bin/laminas errorheromodule:preview | Exception |
| vendor/bin/laminas errorheromodule:preview error | Error |
| vendor/bin/laminas errorheromodule:preview warning | PHP E_WARNING |
| vendor/bin/laminas errorheromodule:preview fatal | PHP Fatal |
You will get the following page if display_errors config is 0:
You can use the error handling in your console application, by extends BaseLoggingCommand, like below:
namespace Application\Command; use ErrorHeroModule\Command\BaseLoggingCommand; use Exception; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; final class HelloWorld extends BaseLoggingCommand { protected function execute(InputInterface $input, OutputInterface $output): int { throw new Exception('some exception logged to DB'); } }
and register to your services like in the documentation.
For production env, you can disable error-preview sample page with set
['error-hero-module']['enable-error-preview-page']to false.
Contributing
Contributions are very welcome. Please read CONTRIBUTING.md
samsonasik/error-hero-module 适用场景与选型建议
samsonasik/error-hero-module 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 33.62k 次下载、GitHub Stars 达 51, 最近一次更新时间为 2016 年 11 月 07 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「log」 「logging」 「mail」 「symfony」 「twig」 「db」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 samsonasik/error-hero-module 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 samsonasik/error-hero-module 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 samsonasik/error-hero-module 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Zend Framework module that sets up Monolog for logging in applications.
Courier offers a convenient and painless solution for creating emails tailored for your Kirby website.
Asynchronous Sentry for Symfony - Fire and forget
Stackdriver handler for Monolog (codeinternetapplications/monolog-stackdriver Fork).
Laravel 5.x.x library for integration Monolog Sentry
High-performance, zero-dependency PSR-3 logger for MonkeysLegion with structured logging, handlers, processors, and PHP 8.4 features.
统计信息
- 总下载量: 33.62k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 52
- 点击次数: 15
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-11-07

