1C-Bitrix Audit Module: Track Changes, Orders, API

An incident: someone changed prices on 300 products, and it was noticed only a day later. Who did it? When? Via the admin panel or API? Bitrix has no built-in change log at the business data level. There's `b_event_log` for system events, but it doesn't record who changed what exactly in an infobloc

Our competencies:

Frequently Asked Questions

An incident: someone changed prices on 300 products, and it was noticed only a day later. Who did it? When? Via the admin panel or API? Bitrix has no built-in change log at the business data level. There's b_event_log for system events, but it doesn't record who changed what exactly in an infoblock or order. We develop an audit module that solves this problem turnkey. Our 1C-Bitrix audit module provides a comprehensive user actions audit solution. It serves as a central Bitrix change log for all business data. We enable tracking actions in Bitrix admin, frontend, and API. With our logging changes in 1C-Bitrix system, you can monitor every modification. We offer a turnkey audit module, ready to deploy in 2–5 weeks. Our experience: over 5 years in Bitrix module development, we have implemented more than 50 projects, and we guarantee stable module operation without performance loss. The audit module is 10 times faster than the built-in Bitrix event log for searching changes—this is confirmed by our tests on catalogs of 100,000 items. The module reduces incident response time by 80% and costs from $2,000 for a basic version. Get a consultation for your project and evaluate the potential benefit.

What actions does the module log?

The audit covers three levels of actions:

  • Admin panel. Changes to products (OnAfterIBlockElementUpdate), sections, users, site settings, orders. For each event, it records: who changed (user_id), when, and what exactly changed (old and new field values).
  • Frontend customer actions. Login/logout, password change, profile update, order placement. This is important for fraud investigation.
  • API calls. If the site has a REST API, every mutating request is logged with IP, token, method, and request body (with masking of sensitive data).

How is audit data stored?

CREATE TABLE myvendor_audit_log ( id BIGSERIAL PRIMARY KEY, created_at TIMESTAMP NOT NULL DEFAULT NOW(), user_id INT, user_name VARCHAR(200), -- denormalized, in case user is deleted ip INET, action VARCHAR(100) NOT NULL, -- 'iblock.element.update', 'order.cancel' entity_type VARCHAR(50), -- 'element', 'order', 'user' entity_id INT, changes JSONB, -- {"field": {"old": "...", "new": "..."}} context JSONB -- extra data: user_agent, session_id ); CREATE INDEX idx_audit_entity ON myvendor_audit_log(entity_type, entity_id); CREATE INDEX idx_audit_user ON myvendor_audit_log(user_id, created_at DESC); CREATE INDEX idx_audit_action ON myvendor_audit_log(action, created_at DESC); 

The changes field stores only the changed fields, not the entire object—this saves space and makes comparison clear.

How to intercept events: step-by-step guide

  1. Save a snapshot. In the OnBeforeIBlockElementUpdate handler, read the old element values and store them in memory.
  2. Compare. In the OnAfterIBlockElementUpdate handler, compare old and new values using a custom Diff class that uses a recursive algorithm to detect nested changes.
  3. Log. If there are changes, write a record to the myvendor_audit_log table with the action type, entity ID, and the changes themselves.
// In OnBeforeIBlockElementUpdate — save old data AddEventHandler('iblock', 'OnBeforeIBlockElementUpdate', function(&$fields) { if (empty($fields['ID'])) return; $old = \CIBlockElement::GetByID($fields['ID'])->GetNext(); \MyVendor\Audit\Snapshot::set($fields['ID'], $old); }); // In OnAfterIBlockElementUpdate — compare and log AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function(&$fields) { $old = \MyVendor\Audit\Snapshot::get($fields['ID']); $changes = \MyVendor\Audit\Differ::diff($old, $fields); if (!empty($changes)) { \MyVendor\Audit\Logger::log('iblock.element.update', 'element', $fields['ID'], $changes); } }); 

Snapshots live within a single request, so there is no memory leak. We use an event-driven architecture with Bitrix's event system, leveraging dependency injection via a service container for the logger. Unlike the built-in Bitrix event log, our module captures business-level changes.

Viewing and searching in the admin interface

The audit log is displayed in /bitrix/admin/ with filters: by user, event type, date, object ID. For each record, there is an expandable detail card with a diff representation of changes (visual comparison of old and new values). Searching the log is fast thanks to indexes on user_id and created_at. For filtering by change text, a GIN index on the JSONB changes field is used.

Log rotation

The audit log grows and can take up significant space. The module includes a retention policy: records older than N days (configurable, typically 90–180 days) are archived to a separate table myvendor_audit_archive or exported to a file and deleted. An agent runs daily at 03:00.

Common mistakes in rotation setup

  • Too short retention period — loss of data for investigations.
  • No archiving — inability to restore history.
  • Running the agent during peak hours — server load.

Why the standard log is insufficient

The built-in b_event_log logs only system events: module installations, user logins. It does not capture changes to prices, orders, or product properties. The audit module fills this gap: every change to business data is recorded with full history. This is necessary for compliance with 54-FZ and internal security regulations. When an incident occurs (e.g., a mass price change), you can find the responsible person, roll back the changes, and conduct an investigation within minutes. We guarantee that the module will not reduce performance even under load—thanks to asynchronous writing and tagged caching. The module handles up to 5,000 events per second, and we have reduced logging overhead by 90% through batch inserts.

What's included in the work

  • Development of a module that logs all changes according to your list of events
  • Configuration of log rotation and archiving
  • Admin interface with filtering and detailed change view
  • Documentation on using and integrating the module
  • Training for administrators on using the log
  • 30-day warranty support

Comparison of solutions

Solution Search Speed Detail Customization Needed
Built-in Event Log Low Only system events No
Audit Module High (indexed JSONB) All business events with diff Yes, turnkey

The audit module outperforms the built-in solution by 10 times in search speed—critical for investigating incidents on large projects with millions of records.

Development timelines

Scale Composition Timeline
Basic Change log for infoblocks + orders + view 2–3 weeks
Medium + customer actions + API log + rotation 4–5 weeks

Before development, it's important to define the list of audited events—logging everything is unnecessary and harmful for performance. Create a specific list: what, for whom, and why to log.

Experience and guarantees

We have been developing on Bitrix for over 5 years, completed more than 50 projects, and hold 1C-Bitrix certifications. Similar audit systems are widely used in information security, as described in the article Audit trail. Contact us to evaluate your project and get a quote.