{"id":333101,"date":"2026-07-15T20:35:18","date_gmt":"2026-07-15T20:35:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/honeylog-ingestion\/"},"modified":"2026-10-19T20:51:44","modified_gmt":"2026-10-19T20:51:44","slug":"honeylog-ingestion","status":"publish","type":"plugin","link":"https:\/\/hr.wordpress.org\/plugins\/honeylog-ingestion\/","author":23524406,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0.7","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Honeylog","header_author":"Honeylog","header_description":"File-backed batched ingestion for WordPress frontend requests.","assets_banners_color":"101828","last_updated":"2026-10-19 20:51:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":10,"downloads":352,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"secondbreakfastio","date":"2026-07-15 20:34:50","revision":3609402},"1.0.1":{"tag":"1.0.1","author":"secondbreakfastio","date":"2026-07-26 20:32:52","revision":3623797},"1.0.2":{"tag":"1.0.2","author":"secondbreakfastio","date":"2026-10-19 20:51:44","revision":3755535}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3609407,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3609407,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3609407,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3609407,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[232,271762,1522],"plugin_category":[36],"plugin_contributors":[273387],"plugin_business_model":[],"class_list":["post-333101","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-ingestion","plugin_tags-logging","plugin_category-analytics","plugin_contributors-secondbreakfastio","plugin_committers-secondbreakfastio"],"banners":{"banner":"https:\/\/ps.w.org\/honeylog-ingestion\/assets\/banner-772x250.png?rev=3609407","banner_2x":"https:\/\/ps.w.org\/honeylog-ingestion\/assets\/banner-1544x500.png?rev=3609407","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/honeylog-ingestion\/assets\/icon-128x128.png?rev=3609407","icon_2x":"https:\/\/ps.w.org\/honeylog-ingestion\/assets\/icon-256x256.png?rev=3609407","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\nHoneylog WordPress Plugin\n\n<p>Multi-file WordPress plugin that batches frontend requests into a JSON queue and flushes to Honeylog.<\/p>\n\n<p>This client targets self-hosted and conventional managed WordPress. It is not\nthe complete integration for WordPress VIP, where edge cache hits do not execute\nPHP and the uploads filesystem is not a durable local queue. Use\n    clients\/wordpress-vip-s3 for VIP.<\/p>\n\n<h3>Behavior<\/h3>\n\n<ul>\n<li>Tracks HTML\/XHTML frontend responses regardless of the request <code>Accept<\/code> header, plus <code>.xml<\/code> and <code>.txt<\/code> URLs (excludes wp-admin pages).<\/li>\n<li>Keeps frontend responses without an explicit Content-Type, including redirects.<\/li>\n<li>Writes each event to a local NDJSON queue file.<\/li>\n<li>Serializes queue writes and rotation using a blocking filesystem lock on local storage.<\/li>\n<li>Schedules a flush every 60 seconds through WP-Cron; actual execution depends on the cron runner.<\/li>\n<li>Sends queued events in batches of up to 100.<\/li>\n<li>Warns administrators when automatic WP-Cron execution is disabled.<\/li>\n<\/ul>\n\n<h3>Plugin Files<\/h3>\n\n<ul>\n<li><code>honeylog-ingestion.php<\/code>: bootstrap and WordPress hooks<\/li>\n<li><code>includes\/honeylog-constants.php<\/code>: constants + option sanitizers<\/li>\n<li><code>includes\/honeylog-batching-utils.php<\/code>: queue file lock, enqueue\/snapshot\/requeue\/flush<\/li>\n<li><code>includes\/honeylog-request-utils.php<\/code>: request capture + HTTP batch sender<\/li>\n<li><code>includes\/honeylog-settings.php<\/code>: admin settings page<\/li>\n<li><code>includes\/honeylog-debug.php<\/code>: persistent debug log + last status\/error helpers<\/li>\n<\/ul>\n\n<h3>Settings<\/h3>\n\n<p>Go to <code>Settings -&gt; Honeylog<\/code>:<\/p>\n\n<ul>\n<li><code>Token<\/code><\/li>\n<li><code>Site Domain<\/code> (optional)<\/li>\n<\/ul>\n\n<p>The ingestion endpoint is fixed to <code>https:\/\/api.honeylog.io\/events<\/code>.<\/p>\n\n<h3>Debugging<\/h3>\n\n<p>Debug log is written to:<\/p>\n\n<ul>\n<li><code>wp-content\/uploads\/honeylog-ingestion\/debug.log<\/code> when available<\/li>\n<li>fallback: <code>wp-content\/honeylog-ingestion-debug.log<\/code><\/li>\n<\/ul>\n\n<h3>Reliable scheduling and cache coverage<\/h3>\n\n<p>On low-traffic or cached sites, configure a system cron to run due WordPress\ncron events every minute. The 60-second schedule is not a delivery deadline.\nSee <code>docs\/clients\/wordpress-installation.md<\/code> for a WP-CLI example.\nRequests served entirely by a page cache or CDN without loading the plugin\ncannot be captured; use server\/CDN log ingestion for those visits.\nThe queue requires a writable local filesystem with working <code>flock<\/code> support.<\/p>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Use response Content-Type at shutdown instead of request Accept to capture crawler page visits.<\/li>\n<li>Wait for concurrent queue mutations using a filesystem lock instead of dropping events after option-lock retries.<\/li>\n<li>Clarify cron scheduling and cache coverage requirements.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Warn administrators when <code>DISABLE_WP_CRON<\/code> is enabled and queued events require an external cron runner.<\/li>\n<li>Track <code>.xml<\/code> and <code>.txt<\/code> visits, including requests with non-HTML <code>Accept<\/code> headers.<\/li>\n<\/ul>","raw_excerpt":"Honeylog batches frontend requests into a JSON queue and flushes them to Honeylog.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/333101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=333101"}],"author":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/secondbreakfastio"}],"wp:attachment":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=333101"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=333101"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=333101"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=333101"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=333101"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=333101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}