Logging Custom Audit Instances
Create an Audit Instance
To log custom information into the system audit log, you must first obtain an
AuditService instance.
AuditService can be autowired as a Spring bean defined in com.flowable.autoconfigure.audit.AuditEngineServicesAutoConfiguration.
Another possibility is to obtain the auditService from the command context in a
custom service task. For example:
protected AuditService getAuditService() {
    AuditEngineConfigurationApi engineConfigurationApi = (AuditEngineConfigurationApi) Context.getCommandContext()
        .getEngineConfigurations().get(AuditEngineConfiguration.KEY_AUDIT_ENGINE_CONFIG);
    if (engineConfigurationApi == null) {
        throw new FlowableException("Audit engine is not configured");
    }
    return engineConfigurationApi.getAuditService();
}
The auditService provides a builder to create an AuditInstance. Created AuditInstances are immutable. AuditlogService, which performs audit instance logging of Adding Additional Auditing Information, is an example of using the builder:
public class AuditLogService extends AbstractPlatformTask {
@Override
public void executeTask(VariableContainer variableContainer,  ExtensionElementsContainer extensionElementsContainer) {
    AuditInstanceBuilder auditInstanceBuilder = getAuditService().createAuditInstanceBuilder();
    auditInstanceBuilder.
        // variable container attributes
        tenantId(VariableContainerUtil.getTenantId(variableContainer)).
        // extension element attributes
        externalId(getExternalId(variableContainer, extensionElementsContainer)).
        creatorId(getCreatorId(variableContainer, extensionElementsContainer)).
        type(getType(variableContainer, extensionElementsContainer)).
        subType(getSubType(variableContainer, extensionElementsContainer)).
        payload(getPayload(variableContainer, extensionElementsContainer));
    setScopes(auditInstanceBuilder, variableContainer, extensionElementsContainer);
    auditInstanceBuilder.create();
}
The created auditInstance is stored in the ${prefix}flw_audit_instance table.
Query for Audit Instances
The AuditInstanceQuery class
is provided by the createAuditInstanceQuery
method in the AuditService class. The available query options are:
singleResult, list and count. For example, to query for all audit items of given process instance:
List<AuditInstance> auditInstances = auditEngineConfiguration.getAuditService().createAuditInstanceQuery().
    scopeId(processInstanceId).
    scopeType(ScopeTypes.BPMN)
    list();
which is transformed into the following query:
SELECT *
FROM {prefix}flw_audit_instance
WHERE scope_id_ = '{processInstanceId}' AND scope_type_ = 'bpmn'
ORDER BY creation_time_ DESC;