HR basics

HR audit log

What is HR audit log?

An HR audit log is a tamper-resistant record of who changed what and when across the system - edits to records, salaries, and leave approvals - used for accountability and compliance.

An audit log turns disputes into facts: who approved that leave, who changed that salary, and when. Good ones mask sensitive fields so the log itself does not leak the data it tracks.

What an audit entry records

A useful entry answers every question about a change on its own, without anyone cross-checking another system or asking around.

Fields of one audit entry
FieldExampleWhy it matters
Who actedAnna Weber, HR adminEvery change has a named person behind it, or "System" for scheduled jobs.
About whomMarek NowakOne filter shows an employee's whole history, which settles disputes and answers GDPR access requests.
What happenedupdated, approved, login failedA fixed list of event names keeps the log searchable.
Which recordLeave request, 13-17 AprLinks the entry to the exact object that changed, such as one leave request.
Before and afterStatus: pending -> approvedThe old and the new value turn "who changed this?" into a fact.
When2026-03-03 11:02:14 UTCStored in UTC and shown in the reader's time zone, so entries from different offices sort correctly.
Where fromIP 203.0.113.42, Firefox on LinuxKept for logins and other security events, to spot a misused account.

What an audit log looks like

Here is one employee's month as it appears in the log, oldest entry first. Note what it does not show: the new salary and the new home address.

Sample audit log for one employee
Time (UTC)WhoActionRecordChange
2026-03-02 09:14Anna WeberupdatedEmployee profile: Marek NowakPosition: Developer -> Senior developer
2026-03-02 09:15Anna WeberupdatedCompensation: Marek NowakAmount: [encrypted] -> [encrypted], effective from 2026-04-01
2026-03-03 11:02Tom FischerapprovedLeave request: 13-17 Apr, 5 daysStatus: pending -> approved
2026-03-04 08:40Marek NowakupdatedOwn profileAddress: [redacted] -> [redacted]
2026-03-05 22:17unknownlogin failedAccount of Marek NowakIP 203.0.113.42, Firefox on Linux, wrong password
2026-04-01 00:05SystemaccruedVacation balance: Marek NowakBalance: 12.5 -> 14.5 days

Masked values are deliberate: the log proves that the salary and the address changed, and who changed them, without becoming a second copy of the data.

One entry under the hood

The salary change from the sample, as it is stored. The amount is masked before the entry is written, so even a raw export of the log does not reveal pay.

One audit entry as JSON
{
  "id": "0192f1c4-7b3e-7a10-9c1d-3f5e8a2b6d41",
  "log": "compensation",
  "event": "updated",
  "actor": { "id": "u-118", "name": "Anna Weber" },
  "subject": { "type": "compensation", "id": "c-2291" },
  "employee": { "id": "u-342", "name": "Marek Nowak" },
  "changes": {
    "old": { "amount": "[encrypted]", "effective_from": "2025-04-01" },
    "new": { "amount": "[encrypted]", "effective_from": "2026-04-01" }
  },
  "created_at": "2026-03-02T09:15:42Z"
}

What to log in an HR system

Log every change someone could later dispute and every event that touches access. Viewing ordinary records usually stays out: logging every page view buries the changes that matter.

Events worth logging
AreaEvents
Employee recordsCreated, edited, terminated, reactivated; manager or department changed
PaySalary, pay type and pay schedule changes, with the effective date
LeaveRequested, approved, rejected, cancelled; manual balance adjustments
Access and securityLogins and failed logins, password resets, role and permission changes, support staff signing in as a user
Automated jobsLeave accruals, year-end carryover, bulk imports - logged with "System" as the actor

What to keep out of the log

An audit log is often kept longer and read by more people than the records it tracks, so it must not become a back door to them. Record that a sensitive field changed and who changed it, and mask the value: salaries, bank details, home addresses, dates of birth.

Some data never belongs in it at all: passwords, reset links and API keys, and health details such as the diagnosis behind sick leave, which is special-category data under GDPR Article 9.

Protect the log itself, too. Entries are only ever added, never edited or deleted from inside the application; only owners and admins can read it; and it is kept for a fixed period, long enough to settle disputes and answer audits, then deleted on schedule.

Related terms

See also

Put these terms into practice

Flat-rate HR for SMBs. 30 days free, no card, cancel anytime.

Start 30-day free trial