data-dog / audit-bundle
Audit bundle for symfony2 and doctrine orm, logs any database change
Installs: 701 476
Dependents: 2
Suggesters: 0
Security: 0
Stars: 134
Watchers: 16
Forks: 63
Open Issues: 23
Type:symfony-bundle
Requires
- php: >=8.1
- doctrine/dbal: ^3.2|^4.0
- doctrine/doctrine-bundle: ^2.9
- doctrine/orm: ^2.13|^3.0
- symfony/console: ^6.4 | ^7.0
- symfony/framework-bundle: ^6.4 | ^7.0
- symfony/security-bundle: ^6.4 | ^7.0
Requires (Dev)
- ext-pdo: *
- ext-pdo_sqlite: *
- phpunit/phpunit: ^9
- symfony/phpunit-bridge: ^6.4 | ^7.0
README
This bundle creates an audit log for all Doctrine ORM database related changes:
- Inserts and updates including their diffs and relation field diffs.
- Many to many relation changes, association and dissociation actions.
- If there is a user in token storage, they will be linked to the log.
- The audit entries are inserted within the same transaction during flush, if something fails the state remains clean.
Basically you can track any change from these log entries if they were managed through standard ORM operations.
NOTE: audit cannot track DQL or direct SQL updates or delete statement executions.
Install
First, install it with composer:
composer require data-dog/audit-bundle
Then, add it in your bundles.
// config/bundles.php return [ ... DataDog\AuditBundle\DataDogAuditBundle::class => ['all' => true], ... ];
Finally, create the database tables used by the bundle:
Using Doctrine Migrations Bundle:
php app/console doctrine:migrations:diff php app/console doctrine:migrations:migrate
Using Doctrine Schema:
php app/console doctrine:schema:update --force
Usage
audit entities will be mapped automatically if you run schema update or similar. And all the database changes will be reflected in the audit log afterwards.
Unaudited Entities
Sometimes, you might not want to create audit log entries for particular entities.
You can achieve this by listing those entities under the unaudited_entities
configuration
key in your config.yml
, for example:
data_dog_audit: unaudited_entities: - App\Entity\NoAuditForThis
Specify Audited Entities
Sometimes, it is also possible, that you want to create audit log entries only for particular entities.
You can achieve it quite similar to unaudited entities. You can list them under the audited_entities
configuration key in your config.yml
, for example:
data_dog_audit: audited_entities: - App\Entity\AuditForThis
You can specify either audited or unaudited entities. If both are specified, only audited entities would be taken into account.
Impersonation
Sometimes, you might also want to blame the impersonator
user instead of the impersonated
one.
You can archive this by adding the blame_impersonator
configuration key in your config.yml
, for example:
data_dog_audit: blame_impersonator: true
The default behavior is to blame the logged-in user, so it will ignore the impersonator
when not explicitly declared.
Clean up old logs
To clean up old logs, use the following command:
bin/console audit-logs:delete-old-logs --retention-period=P6M
You can specify retention-period
, For format, see: https://www.php.net/manual/en/dateinterval.construct.php
License
The audit bundle is free to use and is licensed under the MIT license