JSPM

strapi-plugin-audit-logs

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 77
  • Score
    100M100P100Q76204F
  • License MIT

Comprehensive audit logging plugin for Strapi that tracks all user interactions and system events with a clean admin interface and automatic cleanup

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

  1. Install the plugin using npm or yarn (see installation section above)

  2. Configure the plugin in config/plugins.js or config/plugins.ts

  3. Restart your Strapi application:

    npm run develop
    # or
    yarn develop
  4. 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)

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 created
  • entry.update - Content entry updated
  • entry.delete - Content entry deleted
  • entry.publish - Content entry published
  • entry.unpublish - Content entry unpublished

Media Events

  • media.create - Media file uploaded
  • media.delete - Media file deleted
  • media-folder.create - Media folder created
  • media-folder.update - Media folder updated
  • media-folder.delete - Media folder deleted

User Events

  • user.create - User account created
  • user.update - User account updated
  • user.delete - User account deleted

Authentication Events

  • admin.auth.success - Successful admin login
  • admin.logout - Admin logout

๐ŸŽฏ Usage

Accessing Audit Logs

  1. Navigate to the Strapi admin panel
  2. Look for "Audit Logs" in the main navigation menu
  3. 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:

  1. Go to Settings โ†’ Roles
  2. Select the role to modify
  3. Under "Plugins" โ†’ "Audit Logs", enable "View Audit Logs"
  4. 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 pagination
  • GET /admin/audit-logs/:id - Get specific log details
  • GET /admin/audit-logs/count - Count total logs
  • POST /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

  1. Ensure the plugin is enabled in config/plugins.js
  2. Restart Strapi after configuration changes
  3. Check that your user role has the "View Audit Logs" permission

No Logs Being Created

  1. Verify enabled: true in plugin configuration
  2. Check that the events you want to track are in the events.track array
  3. Restart Strapi after configuration changes
  4. Look for error messages in Strapi logs

Performance Issues

  1. Reduce the number of tracked events in configuration
  2. 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:

  1. Check the troubleshooting section
  2. Search existing GitHub issues
  3. Create a new issue if needed