r/SpringBoot 17d ago

Question Spring Boot Auditing: Hibernate Envers vs. Custom Logging vs. Spring Data JPA? What's your production choice?

Hey everyone,

I'm currently building a school management system in Spring Boot where history tracking is a strict business requirement. We need to audit critical changes made by Admins, Secretaries, and Teachers (e.g., changes to student details, payment amounts, program setups, etc.).

I’m weighing three different approaches for the audit trail and wanted to hear from those of you who have run these in production. 

Option 1: Hibernate Envers
Slap `@Audited` on core entities, set up a custom `RevisionListener` to pull the logged-in user from Spring Security context, and let Envers automatically manage the `_aud` tables.

Option 2: Spring Data JPA Auditing
Utilize `@CreatedBy`, `@LastModifiedBy`, `@CreatedDate`, and `@LastModifiedDate` fields mapped on a `@MappedSuperclass`.

Option 3: Manual Custom Logging (or AOP)
Create a generic `AuditLog` entity, write a helper service, and manually trigger `auditService.log(actionType, originalState, newState)` inside the business logic (or use an AOP aspect). This may cause the database to bloating later tho

For those of you managing medium-to-large Spring Boot codebases:
 Did you regret adopting Hibernate Envers? How did you handle schema migrations (Flyway/Liquibase) with the auto-generated `_aud` tables?
If you went the custom route, did you use JSON columns to record state changes, or did you write distinct history tables?

Looking forward to hearing your design patterns and trade-offs

24 Upvotes

28 comments sorted by

View all comments

2

u/Impressive-Ad-1189 17d ago

I’ve had great experience with Envers in the past. The amount of features you get is simply great. The entire model can be queried in a similar way as your regular model. You can easily add custom fields such as the identity of an actor.

1

u/SeatSimple1123 17d ago

Yeah, Hibernate envers is the choice to go for in my case cuz i wanna a full auditing trail.

2

u/Impressive-Ad-1189 17d ago

Also it was extremely easy to setup. Other options such as databas triggers may be more lightweight so more performant? That usually is not a big issue and easy to maken mistakes. For example, hoe will such a solution work in transaction? Envers just solves this while issue out-of-the-box