Activity Log – Monitor & Record User Changes
An easy to use, fully supported WordPress activity log plugin. Want to know exactly who does what on your WordPress site? Activity Log works like an airplane’s black box: it quietly records every action in the WordPress admin — and now every request made through the REST API, WP-CLI, WP-Cron, and more — so you always know: If someone is trying to hack your site When a post was published, and who published it If a plugin/theme was activated/deactivated Suspicious admin activity The plugin doesn’t require any setup; it works right out of the box, runs on its own database table so it doesn’t slow down your site, and stays out of your way until you need it. What’s New Request Source Tracking – See exactly where each change came from: the WP Admin, the REST API, WP-CLI, WP-Cron, XML-RPC, or the WP Abilities API, including which Application Password was used. Filter the log by source to quickly spot automated or API-driven changes alongside manual admin activity. Email Logging – Capture all emails sent from your WordPress site for streamlined debugging and compliance. Especially useful for WooCommerce stores tracking order emails alongside other site events. Export to CSV – Export your Activity Log data to CSV, or build support for your own format with our dedicated Export API. Data Privacy and GDPR Compliance – Export or erase log data directly through the WordPress Privacy Tools. If you have more than a handful of users, keeping track of who did what by hand is virtually impossible. Activity Log solves that by tying every action back to the user who triggered it, in an easy-to-filter view right on your WordPress dashboard. With the Activity Log you can record: WordPress – Core updates Posts – Created, updated, deleted Pages – Created, updated, deleted Custom Post Type – Created, updated, deleted Tags – Created, updated, deleted Categories – Created, updated, deleted Taxonomies – Created, updated, deleted Menus – Created, updated, deleted Media – Created, updated, deleted Comments – Created, approved, unapproved, trashed, untrashed, spammed, unspammed, deleted Users – Login, logout, login failed, update profile, registered, deleted Plugins – Installed, updated, activated, deactivated, changed Themes – Installed, updated, deleted, activated, changed (Editor and Customizer) Widgets – Added to sidebar, deleted from sidebar, order widgets Setting – General, writing, reading, discussion, media, permalinks Options – Extended custom settings for 3rd party plugins Export – Exported activity log file Request Source – WP Admin, REST API, WP-CLI, WP-Cron, XML-RPC, WP Abilities, and Application Password name when used WooCommerce – Track products, orders, customers, and more bbPress – Forums, topics, replies, taxonomies, and other actions Emails sent from WordPress site – Sending successful, sending failed There’s more, of course, but you get the point… For each event recorded by the activity log, the following details are also logged: Date and time of occurrence User and user role responsible for the change Source IP address from which the change originated Request source — WP Admin, REST API, WP-CLI, WP-Cron, XML-RPC, or WP Abilities Affected object where the change occurred Data Storage and Performance All events are stored in a dedicated custom database table, keeping the impact on your site’s performance to a minimum — even under heavy traffic. Uninstall Clean-up Uninstalling the plugin removes all of its data from your database automatically, leaving nothing behind. What users have to say “Its tools, particularly for data privacy and GDPR compliance, make it indispensable for websites operating within European Union boundaries or dealing with EU citizens’ data” – HubSpot.com “If you’re after a competent WP security audit log plugin with all the basic features you need, Activity Log is it!” – WPAstra.com “Activity Log features a remarkably straightforward dashboard interface, providing administrators with an at-a-glance understanding of site interactions” – Malcare.com “Thanks to this step, we’ve discovered that our site was undergoing a brute force attack” – Artdriver.com “Activity Log lets you track a huge range of activities. Overall, very easy to use and setup” – ElegantThemes.com Contributions: Would you like to contribute to this plugin? You’re more than welcome to submit your pull requests on the GitHub repo. And, if you have any notes about the code, please open a ticket on the issue tracker.
Top keywords
- log13×1.89%
- activity12×1.75%
- deleted12×1.75%
- activity log10×1.46%
- updated10×1.46%
- created9×1.31%
- site9×1.31%
- updated deleted9×1.31%
- created updated8×1.16%
- created updated deleted8×1.16%
- wordpress8×1.16%
- data7×1.02%
Stream – Activity Log & Audit Trail
Stream is a complete activity log and audit trail for your WordPress site: see what changed, who changed it, and when. From plugin activations to post edits, login attempts to new user creation, every user and system action is recorded in an audit log built for debugging, security monitoring, and compliance. Every logged action is displayed in an activity stream and organized for easy filtering by User, Role, Context, Action or IP address. Admins can highlight entries in the activity log—such as suspicious user activity—to investigate what’s happening in real time. Stream also lets you configure email alerts and webhooks for integrations like Slack and IFTTT, so your team knows the moment something goes wrong. Stream keeps its own logs healthy too: records are automatically purged on the retention schedule you choose, with batched deletion and orphaned-data cleanup that stay reliable even on very large sites. Stream is also AI-ready: its abilities are exposed through the WordPress Abilities API and MCP Adapter, so AI assistants and other tools can securely query your site’s activity records. For advanced users, Stream supports a network view of all activity records on your Multisite, exclude rules to ignore certain kinds of user activity, and a WP-CLI command for querying records. Stream is free and fully open source — development happens in the open on GitHub, maintained by XWP. With Stream’s powerful activity logging, you’ll have the information you need to responsibly manage your WordPress sites. Built-In Tracking Integrations For Popular Plugins: Advanced Custom Fields bbPress BuddyPress Easy Digital Downloads Gravity Forms Jetpack Two Factor User Switching WooCommerce Yoast SEO Built-In Tracking For Core Actions: Posts Pages Custom Post Types Users Themes Plugins Tags Categories Custom Taxonomies Settings Custom Backgrounds Custom Headers Menus Media Library Widgets Comments Theme Editor WordPress Core Updates Other Noteworthy Features: Multisite view of all activity records on a network Limit who can view user activity records by user role Set exclude rules to ignore certain kinds of user activity Live updates of user activity records in the Stream Export your Activity Stream as a CSV or JSON file WP-CLI command for querying records Configuration Most of the plugin configuration is available under the “Stream” → “Settings” page in the WordPress dashboard. Request IP Address The plugin expects the $_SERVER['REMOTE_ADDR'] variable to contain the verified IP address of the current request. On hosting environments with PHP processing behind reverse proxies or CDNs the actual client IP is passed to PHP through request HTTP headers such as X-Forwarded-For and True-Client-IP which can’t be trusted without an additional layer of validation. Update your server configuration to set the $_SERVER['REMOTE_ADDR'] variable to the verified client IP address. As a workaround, you can use the wp_stream_client_ip_address filter to adapt the IP address: add_filter( 'wp_stream_client_ip_address', function( $client_ip ) { // Trust the first IP in the X-Forwarded-For header. // ⚠️ Note: This is inherently insecure and can easily be spoofed! if ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $forwarded_ips = explode( ',' $_SERVER['HTTP_X_FORWARDED_FOR'] ); if ( filter_var( $forwarded_ips[0], FILTER_VALIDATE_IP ) ) { return $forwarded_ips[0]; } } return $client_ip; } ); ⚠️ WARNING: The above is an insecure workaround that you should only use when you fully understand what this implies. Relying on any variable with the HTTP_* prefix is prone to spoofing and cannot be trusted! Known Issues We have temporarily disabled the data removal feature through plugin uninstallation, starting with version 3.9.3. We identified a few edge cases that did not behave as expected and we decided that a temporary removal is preferable at this time for such an impactful and irreversible operation. Our team is actively working on refining this feature to ensure it performs optimally and securely. We plan to reintroduce it in a future update with enhanced safeguards. Contribute There are several ways you can get involved to help make Stream better: Report Bugs: If you find a bug, error or other problem, please report it! You can do this by creating a new topic in the plugin forum. Once a developer can verify the bug by reproducing it, they will create an official bug report in GitHub where the bug will be worked on. Translate into Your Language: Use the official plugin translation tool to translate Stream into your language. Suggest New Features: Have an awesome idea? Please share it! Simply create a new topic in the plugin forum to express your thoughts on why the feature should be included and get a discussion going around your idea. Issue Pull Requests: If you’re a developer, the easiest way to get involved is to help out on issues already reported in GitHub. Be sure to check out the contributing guide for developers. Thank you for wanting to make Stream better for everyone! View contributors here.