Does This Self-Hosted Application Leave an Audit Trail? A Buyer’s Checklist
Before placing sensitive business data in a self-hosted application, establish whether it produces usable audit records—not merely operational logs. Use this documentation-led checklist to assess event coverage, identity, retention, protection, search and export.

Audit logging is an application-selection requirement
A self-hosted application can be easy to deploy and still be a poor fit for data that requires accountable use. If the application will hold customer, employee, financial, operational or otherwise sensitive business data, ask an early question: can the team later establish who did what, to which object, when, and through which interface?
This is broader than incident response. A usable audit trail can support investigation of an unexpected change, approval and exception workflows, periodic access reviews, accountability for configuration changes, and evidence gathering after a dispute. NIST event-awareness guidance identifies user interaction and time, configuration actions, and stored-data access and usage as audit-relevant capabilities.
Do not treat “has logs” as a passing answer. Auditability is a product and deployment property. The application must generate the needed events, the deployment must retain them, authorized reviewers must be able to retrieve and interpret them, and controls must protect them from unauthorized alteration or deletion.
- Make auditability a scored requirement before selecting an application, rather than a task deferred until after production launch.
- Write requirements in terms of decisions the records must support, such as “identify who granted a role” or “review exports of customer records.”
- Assign an owner for application audit settings, log review procedures, retention decisions and access to exported evidence.

Operational logs, audit logs and database history answer different questions
Operational logs are principally for running software. Docker logging drivers collect information from running containers and services; Docker’s default json-file driver stores container logs locally unless another configuration is used. Those records can help diagnose a crash, warning or runtime error, but they do not inherently establish that a named business user changed a particular customer record.
Reverse-proxy logs describe a different layer. Traefik distinguishes its own logs, which cover such matters as startup, configuration, events and shutdown, from access logs for requests handled by the proxy. Access logs may establish that a request reached an endpoint, but may not reliably identify the authenticated business actor, the business object affected or the outcome of the action. Their fields may also be deliberately retained, dropped or redacted.
Database history is different again. PostgreSQL write-ahead logging records data-file changes before the underlying files are changed so recovery can redo changes after a crash. Logical decoding can make persistent table changes readable from WAL. Neither mechanism automatically supplies an investigation-ready business narrative: application context, user identity, authorization context and the meaning of a change may be absent or difficult to reconstruct.
Use each source for its appropriate purpose. Operational and proxy logs remain valuable for troubleshooting and infrastructure investigations. Database mechanisms may be useful for recovery or technical analysis. But do not substitute any of them for application-level audit records without testing whether they meet the actual evidence requirement.
- Operational log: “What did the process or container report?”
- Proxy access log: “What request did the edge handle?”
- Database history: “What storage-level change occurred?”
- Application audit record: “Which actor performed which meaningful business or administrative action, on what, when, and with what result?”

Start with the decisions the trail must support
A long event list is not a requirement. Begin by listing the questions a reviewer must be able to answer under realistic conditions. This prevents teams from overvaluing high-volume technical logging while overlooking the few actions that create the greatest business risk.
For example, a quarterly access review needs reliable membership and role-change information. An investigation into altered financial data may need the affected entity, before-and-after values where appropriate, actor identity, time and action outcome. An approval workflow may require evidence that a designated person approved, rejected or bypassed a step. The exact fields and retention period should follow from these questions.
Make the scope explicit. A system may audit administrator activity but not ordinary user changes, or record successful authentication but not failures. Neither is inherently unacceptable; the issue is whether the documented and tested coverage matches your stated use cases.
- Investigations: Can you identify the actor, object, action, time, outcome and relevant context?
- Approvals: Can you demonstrate who approved, rejected, delegated or changed an approval rule?
- Access reviews: Can you identify membership, roles, permission changes and the responsible actor?
- Change accountability: Can you trace administrative configuration changes, integration changes and security-relevant settings?
- Data-use review: Can you identify access to sensitive stored data and high-risk actions such as exports when your policy requires it?
Events worth checking before adoption
Use the application’s official documentation to identify event families, then map them to your use cases. Do not assume that an event described in documentation is enabled, stored or available in every deployment mode. For example, Keycloak documentation notes that user events are not stored or displayed by default until an administrator enables event saving.
Authentication and authorization activity is a starting point: successful sign-ins, failed sign-ins, account recovery where relevant, session-related events where documented, role or group changes, and changes to privileges. For administrative activity, include changes made in the management interface and, where it matters, management APIs. Keycloak documents auditing administrator actions in its Admin Console and REST invocations used for those actions.
Business-data coverage deserves separate scrutiny. Look for creation, update, deletion, access or use of sensitive stored data where required, bulk operations, exports, imports, sharing changes and changes to integration credentials or connectors. An application may provide excellent administrative auditing while offering limited visibility into individual business-record actions.
A useful event should carry enough context to be interpreted later. GitLab’s published audit-event schema illustrates a strong comparison baseline: author identity, event timestamp, entity identification and type, event type, a unique event ID, and additional details. Your chosen application need not use the same schema, but its records should answer equivalent questions for your requirements.
- Successful and failed authentication activity
- User, group, role and permission changes
- Creation, update and deletion of sensitive or regulated records, where required
- Record access or usage when policy or risk requires it
- Exports, downloads, imports, bulk changes and sharing actions
- Administrative configuration changes
- Integration, API-token, webhook or connector changes
- Administrative actions performed through both user interfaces and APIs, when applicable
Verify the documentation, configuration and evidence path
A vendor feature page is not enough. Read the official administrator documentation for the specific deployment model you are considering, then verify the configuration defaults and the resulting records in a trial. Treat any unknown as a gap until the vendor documentation or your test resolves it.
First, establish event coverage. Which actions create events? Are both successful and unsuccessful actions recorded where needed? Are ordinary user actions, administrative actions and API actions covered separately? Can event categories be enabled or disabled?
Next, inspect record quality. Determine whether the record identifies an actor consistently, records an unambiguous timestamp and timezone or time standard, identifies the affected entity, captures the action type and outcome, and includes a unique identifier or correlation information. Also determine how the system represents service accounts, automation and anonymous activity. An event attributed only to “API” or “system” may be insufficient for accountability unless it can be correlated with a stronger identity source.
Then verify retrieval and lifecycle behavior. Check searchable fields, filters, pagination, export formats, API access and any event-streaming capability. GitLab documents filtering by actor and date range but notes that text search in audit-event details is not supported in its interface; it recommends external streaming for comprehensive search and analysis. This is why “viewable in the UI” and “investigation-ready search” should be separate worksheet rows.
Finally, evaluate protection. NIST AU-9 treats protection of audit information and audit logging tools from unauthorized access, modification and deletion as a distinct objective. A log that an ordinary administrator can silently alter or clear does not become immutable simply because it exists.
- Coverage: Which required actions are recorded, and which are not?
- Actor: Is the human user, service account or administrator reliably identified?
- Time: Is there a precise event time, and can records be correlated across systems?
- Object: Does the record identify the affected record, account, setting or entity?
- Outcome and details: Does it record success, failure and enough context to understand the action?
- Search: Can reviewers filter by actor, object, event type and time range? Is detail text searchable if needed?
- Export: Can records be exported or retrieved through a supported interface in a useful format?
- Retention: Is storage enabled, how long are events retained, and who can alter or clear them?","Protection: Who can read, modify or delete records, and what independent safeguards exist?"],
Frequently asked questions
Are Docker container logs an audit trail?
Usually not by themselves. Docker logging records information from running containers and services, which is useful for operations. It does not automatically establish the authenticated business actor, affected record and meaning of an application action. Assess application-level audit records separately.
Can reverse-proxy access logs prove what a user did?
They can help establish that a request was handled, but they describe the proxy layer. Required fields can also be retained, dropped or redacted. Test whether the records reliably contain the authenticated identity, relevant object, action outcome and context needed for your specific investigation.
Does database write-ahead logging provide audit records?
PostgreSQL WAL is designed for recovery by recording data changes before altered data files are written. Logical decoding can expose persistent changes in a readable form. Neither automatically provides a complete business audit narrative, including the application user, authorization context and action meaning.
What is the quickest way to test audit logging during an evaluation?
Create a written test script from your requirements. Generate a successful and failed sign-in, change a role, modify a representative sensitive record, perform an export if applicable, alter a configuration setting and use an API or integration where it is in scope. For every event, retrieve the evidence and check its actor, timestamp, object, action, outcome, searchability, exportability and retention behavior.
Does managed deployment remove the customer’s audit-governance responsibilities?
No. A managed deployment can reduce infrastructure work around a self-hosted application, but the customer team still needs to decide which application events are required, configure supported audit settings, set appropriate retention, restrict access to records and establish review and response procedures. Airbip manages cloud infrastructure around Docker-based application workloads and provides configurable backups, routing and TLS automation; those capabilities should not be mistaken for application-level audit coverage.
When should a team use a central logging pipeline or another deployment model?
Consider a separate pipeline when the application’s native interface lacks the search, retention, export or protection needed for your use case, and when it can emit supported structured events. Treat the destination as sensitive because audit-event data may contain sensitive information. Choose another application or deployment model when the required events cannot be generated reliably, cannot be protected adequately or cannot be retained and retrieved under your obligations.
Sources and further reading
- Configure logging drivers — Docker
- Logs and Access Logs — Traefik Labs
- Write-Ahead Logging (WAL) — PostgreSQL Global Development Group
- Logical Decoding Concepts — PostgreSQL Global Development Group
- Server Administration Guide: Configuring auditing to track events — Keycloak
- Audit events — GitLab
- Audit event schema and examples — GitLab
- Audit event streaming for top-level groups — GitLab
- Security and Privacy Controls for Information Systems and Organizations, AU-9 — NIST
- Cybersecurity Event Awareness — NIST