Complete architectural guide to building immutable audit trails, ABAP Cloud BALI application logs, and BTP Audit Log Service integrations compliant with SOX 404, GDPR, and FDA 21 CFR Part 11.
In heavily audited industries (Life Sciences, Pharmaceuticals, Global Banking, Defense), every modification to master data or financial postings must generate a tamper-evident audit record. In legacy SAP ECC systems, developers frequently built custom Z-tables or relied on classic Change Documents (CDHDR / CDPOS) with unmanaged database updates. In modern ABAP Cloud and SAP BTP, direct modifications to unreleased tables violate Clean Core principles and fail automated ATC checks.
| Audit Dimension | Legacy Monolithic Approach | Clean Core Compliance Architecture |
|---|---|---|
| Application Logging | Unreleased Function Modules (APPL_LOG_WRITE_MESSAGES) |
ABAP Cloud BALI framework (cl_bali_log, cl_bali_header_setter) |
| Side-by-Side Logging | Custom database tables on BTP | SAP BTP Audit Log Service (auditlog-api) with SIEM streaming |
| Data Modification Hooks | Classic User Exits (USEREXIT_SAVE_DOCUMENT_PREPARE) |
RAP Behavior Definition with additional save / EML handlers |
| Tamper-Evidence | None (Database DBAs could alter rows in SE16) | Cryptographic HMAC-SHA256 signatures & blockchain hash chaining |
The Business Application Log Interface (BALI) is the official SAP-released framework in ABAP Cloud for capturing diagnostic and compliance logs. Unlike classic logs, BALI logs cannot be bypassed or silently dropped during transaction rollback when committed via cl_bali_log_db with job assignment.
For cloud-native extensions running on SAP BTP Cloud Foundry or Kyma, the SAP BTP Audit Log Service provides a multi-tenant, tamper-evident repository for three mandatory audit categories:
In RAP (ABAP RESTful Application Programming Model), audit logging belongs in the save_modified method of an additional save behavior implementation:
METHOD save_modified.
IF update-salesorder IS NOT INITIAL.
LOOP AT update-salesorder ASSIGNING FIELD-SYMBOL(<order>).
zcl_clean_core_audit_trail=>record_audit_entry(
iv_entity_id = CONV string( <order>-%tky-SalesOrder )
iv_action = 'UPDATE'
iv_delta_json = /ui2/cl_json=>serialize( <order> ) ).
ENDLOOP.
ENDIF.
ENDMETHOD.
Use our free web utility to generate ABAP Cloud BALI loggers, BTP Audit Log API handlers, and immutable audit table schemas:
→ Open SAP Clean Core Audit Trail & Compliance Logging Architect (Tool #74)
Master compliance auditing, zero-trust security architectures, and Clean Core governance in our comprehensive books.