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
-
Save a snapshot. In the
OnBeforeIBlockElementUpdatehandler, read the old element values and store them in memory. -
Compare. In the
OnAfterIBlockElementUpdatehandler, compare old and new values using a custom Diff class that uses a recursive algorithm to detect nested changes. -
Log. If there are changes, write a record to the
myvendor_audit_logtable 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.

