=== Hagakure - Yet Another Error Reporter === Contributors: tarosky, Takahashi_Fumiki, kuno1 Tags: error, debug, error-log, backtrace, slow-query Requires at least: 5.9 Tested up to: 7.0 Requires PHP: 7.4 Stable Tag: 1.3.3 License: GPLv3 or later License URI: https://www.gnu.org/licenses/gpl-3.0.html A WordPress plugin to clarify meaningless errors like "Allowed memory size of xxxxxxxx bytes exhausted". == Description == Have you ever seen an error log like the one below? > PHP Fatal error: Allowed memory size of xxxxxx bytes exhausted (tried to allocate xxx bytes) in /var/www/wordpress/wp-includes/wp-db.php on line 2007 This means that [PHP memory limit](https://www.php.net/manual/en/ini.core.php#ini.memory-limit) is exhausted while retrieving data from a database. In any case, this happens when your site has big data and makes insane loops inside. But we want to know that **which plugin tried to retrieve data?** Hagakure adds extra information to error.log file when `wp-db.php` causes memory limit error:
[08-May-2019 10:28:37 UTC] wpdb Error Backtrace:
#1 Kunoichi\Hagakure\DbLogger->filter_query() /app/public/wp-includes/class-wp-hook.php Line 286
#2 WP_Hook->apply_filters() /app/public/wp-includes/plugin.php Line 208
#3 apply_filters /app/public/wp-includes/wp-db.php Line 1871
#4 wpdb->query() /app/public/wp-includes/wp-db.php Line 2579
#5 wpdb->get_results() /app/public/wp-includes/class-wp-query.php Line 2979
#6 WP_Query->get_posts() /app/public/wp-includes/class-wp-query.php Line 3387
#7 WP_Query->query() /app/public/wp-includes/post.php Line 1961
#8 get_posts /app/public/wp-content/plugins/hagakure/hagakure.php Line 34
#9 {closure} /app/public/wp-includes/class-wp-hook.php Line 286
#10 WP_Hook->apply_filters() /app/public/wp-includes/class-wp-hook.php Line 310
#11 WP_Hook->do_action() /app/public/wp-includes/plugin.php Line 465
#12 do_action /app/public/wp-includes/template-loader.php Line 13
#13 require_once /app/public/wp-blog-header.php Line 19
#14 require /app/public/index.php Line 17
#15 URI: /?p=1
This log will always follow the memory limit Fatal Error by `wp-db.php`. Now you can find `#8` calls `get_posts` repeatedly.
We recommend watching logs with notification services like [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html).
This error occurs in the productional environment, and you may not have a chance to see it occurs.
We use Hagakure with our [hosting service](https://hosting.kunoichiwp.com/), please look forward to seeing [our blog published](https://kunoichiwp.com/blog) and describing the integration!
This plugin also adds debug backtrace to error logs. To modify the error level to a detailed backtrace, define the constant in wp-config.php or somewhere else:
define( 'HAGAKURE_ERROR_LEVEL', E_NOTICE | E_USER_WARNING | E_WARNING | E_USER_ERROR );Besides that, if `SAVEQUERIES` is set `true`, the slow query log will be logged with PHP debug backtrace. This helps you to debug. == Acknowledgements == The base text for dummy content is "Three Ghost Story" by Charles Dickens. The text file is modified the one of [Project Gutenberg](https://www.gutenberg.org/ebooks/1289). == Installation == = Requirements = * WordPress 5.9 or later. * PHP 7.4 or later. Tested and supported on PHP 7.4, 8.0, 8.2 and 8.3. = Steps = 1. Upload `hagakure` folder to the `/wp-content/plugins` directory. 2. Activate the plugin through the 'Plugins' menu in WordPress. 3. That's it. This plugin will work as background. == Frequently Asked Questions == = Does this plugin support PHP 8.x? = Yes. Hagakure requires PHP 7.4 or later and is tested against PHP 7.4, 8.0, 8.2 and 8.3 in CI. = How can I contribute? = We host this plugin on GitHub [tarosky/hagakure](https://github.com/tarosky/hagakure). Please feel free to send [PRs](https://github.com/tarosky/hagakure/pulls) or to make [issues](https://github.com/tarosky/hagakure/issues). == Screenshots == W.I.P == Changelog == = 1.3.3 = * Respect the error suppression operator(@) and `error_reporting()` so that intentionally suppressed errors (e.g. `EINTR` from blocking socket functions) are no longer logged. = 1.3.2 = * Display only the request URI for non-DB errors in the error log. = 1.3.1 = * Bump required PHP and WP version. * Fix memory limit error log logic. * Move the ownership to TAROSKY Inc from Kunoichi Inc. Tarosky is a parent company of Kunoichi Inc. Developers are the same ☺️ = 1.2.0 = * Slow query can be logged with the backtraces. = 1.1.0 = * Add Request URI to backtrace. = 1.0.0 = * Add warning and notice detail handler. = 0.8.0 = * First Release.