Package Exports
- strapi-plugin-audit-logs
- strapi-plugin-audit-logs/strapi-server.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (strapi-plugin-audit-logs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Strapi Audit Logs Plugin
A comprehensive audit logging plugin for Strapi that tracks all user interactions and system events with a clean admin interface and automatic cleanup.
โจ Features
- ๐ Comprehensive Logging: Track content operations, media uploads, user management, and authentication events
- ๐ฏ Smart Event Tracking: Automatically logs content creation, updates, deletions, publishing, and more
- ๐ Data Security: Configurable sensitive data redaction
- ๐๏ธ Rich Admin UI: Beautiful interface with filtering, search, and detailed log views
- ๐งน Automatic Cleanup: Configurable log retention with manual cleanup option
- ๐ Detailed Logging: Captures user info, IP addresses, HTTP context, and operation details
- ๐ Simple Permissions: Basic read access with super admin cleanup controls
๐ Installation
Using NPM
npm install strapi-plugin-audit-logs
Using Yarn
yarn add strapi-plugin-audit-logs
โ๏ธ Configuration
After installation, you need to configure the plugin in your config/plugins.js
(or config/plugins.ts
for TypeScript):
module.exports = {
"audit-logs": {
enabled: true,
config: {
enabled: true,
deletion: {
enabled: true,
frequency: "logAge",
options: {
value: 90,
interval: "day",
},
},
excludeContentTypes: [
"plugin::any-custom-type.any-custom-type",
],
excludeEndpoints: [
"/_health",
"/admin/renew-token",
"/api/upload",
"/api/any-custom-type/any-custom-route",
],
redactedValues: [
"password",
"token",
"jwt",
"authorization",
"secret",
"key",
"private",
],
events: {
track: [
"entry.create",
"entry.update",
"entry.delete",
"entry.publish",
"entry.unpublish",
"media.create",
"media.delete",
"media-folder.create",
"media-folder.update",
"media-folder.delete",
"user.create",
"user.update",
"user.delete",
"admin.auth.success",
"admin.logout",
],
},
},
},
};
TypeScript Configuration
For TypeScript projects, create or update config/plugins.ts
:
export default {
"audit-logs": {
enabled: true,
config: {
// ... same configuration as above
},
},
};
๐ง Setup
Install the plugin using npm or yarn (see installation section above)
Configure the plugin in
config/plugins.js
orconfig/plugins.ts
Restart your Strapi application:
npm run develop # or yarn develop
Set up permissions in the Strapi admin panel:
- Go to Settings โ Roles
- Edit the roles that should have access to audit logs
- Enable "View Audit Logs" permission for the Audit Logs plugin
๐ Configuration Options
Basic Configuration
enabled
- Type:
boolean
- Default:
true
- Description: Enable/disable the entire plugin
deletion
Configure automatic log cleanup:
- enabled:
boolean
- Enable automatic cleanup (runs daily at midnight) - frequency:
'logAge' | 'logCount'
- Cleanup strategy - options:
- For
logAge
:{ value: 90, interval: 'day' }
(delete logs older than 90 days) - For
logCount
:{ value: 1000 }
(keep only latest 1000 logs)
- For
excludeEndpoints
Array of API endpoints to exclude from logging. Supports:
- Exact matches:
/api/my-custom-endpoint
- Prefix matches:
/admin/renew-token
(matches/admin/renew-token/anything
) - Wildcards:
/api/upload/*
(matches any endpoint starting with/api/upload/
)
redactedValues
Array of field names to redact in logged data for security purposes.
events
Configure automatic event tracking:
- track:
string[]
- Array of events to log automatically
๐ Tracked Events
The plugin automatically tracks these system events:
Content Events
entry.create
- Content entry createdentry.update
- Content entry updatedentry.delete
- Content entry deletedentry.publish
- Content entry publishedentry.unpublish
- Content entry unpublished
Media Events
media.create
- Media file uploadedmedia.delete
- Media file deletedmedia-folder.create
- Media folder createdmedia-folder.update
- Media folder updatedmedia-folder.delete
- Media folder deleted
User Events
user.create
- User account createduser.update
- User account updateduser.delete
- User account deleted
Authentication Events
admin.auth.success
- Successful admin loginadmin.logout
- Admin logout
๐ฏ Usage
Accessing Audit Logs
- Navigate to the Strapi admin panel
- Look for "Audit Logs" in the main navigation menu
- Click to view the audit logs interface
Viewing Logs
The audit logs interface provides:
- Table View: See all logs with action, date, user, method, status, and IP address
- Action Filter: Dropdown to filter by specific action types
- User Search: Text input to search by username or email
- Pagination: Navigate through large numbers of logs
- Details Modal: Click "View" to see full log details including JSON payload data
Log Details
Each log entry contains:
- Action: The type of action performed (with color-coded badges)
- Date: When the action occurred
- User: Who performed the action (username/email)
- Method: HTTP method used (GET, POST, PUT, DELETE)
- Status Code: Response status code (with color coding)
- IP Address: Client IP address
- User Agent: Client browser/application
- Payload Data: Full operation details in JSON format
Manual Cleanup
Super administrators can manually trigger log cleanup by clicking the "Cleanup Old Logs" button in the interface.
๐ Permissions
The plugin uses a simplified permission system:
- View Audit Logs: Basic access to view the audit logs page and browse logs
- View Details: Access to detailed log information (available to all users with read access)
- Cleanup: Manual cleanup functionality (super administrators only)
To grant access:
- Go to Settings โ Roles
- Select the role to modify
- Under "Plugins" โ "Audit Logs", enable "View Audit Logs"
- Cleanup functionality is automatically available to super administrators
๐ API Endpoints
The plugin provides these API endpoints (admin authentication required):
GET /admin/audit-logs
- List audit logs with filtering and paginationGET /admin/audit-logs/:id
- Get specific log detailsGET /admin/audit-logs/count
- Count total logsPOST /admin/audit-logs/cleanup
- Trigger manual cleanup (super admin only)
๐๏ธ Database Schema
The plugin creates an audit_logs
table with these fields:
Field | Type | Description |
---|---|---|
id |
Primary Key | Unique identifier |
action |
String | Action performed (e.g., entry.create, media.delete) |
date |
DateTime | Timestamp of the action |
payload |
JSON | Operation details and context |
userId |
Integer | User ID (if authenticated) |
userDisplayName |
String | User display name |
userEmail |
String | User email |
endpoint |
String | API endpoint accessed |
method |
String | HTTP method (GET, POST, PUT, DELETE) |
statusCode |
Integer | HTTP response status code |
ipAddress |
String | Client IP address |
userAgent |
Text | Client user agent string |
๐ Security Considerations
- Sensitive data is automatically redacted based on configuration
- Logs are only accessible to users with proper permissions
- IP addresses and user agents are logged for security auditing
- Cleanup functionality restricted to super administrators
- Consider log retention policies for compliance requirements
๐ ๏ธ Troubleshooting
Plugin Not Appearing
- Ensure the plugin is enabled in
config/plugins.js
- Restart Strapi after configuration changes
- Check that your user role has the "View Audit Logs" permission
No Logs Being Created
- Verify
enabled: true
in plugin configuration - Check that the events you want to track are in the
events.track
array - Restart Strapi after configuration changes
- Look for error messages in Strapi logs
Performance Issues
- Reduce the number of tracked events in configuration
- Decrease log retention period for faster cleanup
๐ Compatibility
- Strapi: 4.x
- Node.js: 18.x, 20.x
- Database: PostgreSQL, MySQL/MariaDB, SQLite
- Operating System: Windows, macOS, Linux
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
This plugin was inspired by Strapi Enterprise Edition's audit logs feature and the community plugin by Marje3PSUT.
๐ Support
If you encounter any issues or have questions:
- Check the troubleshooting section
- Search existing GitHub issues
- Create a new issue if needed