Quickstart
Install, wire, and record audit events in under 5 minutes.
Install
Section titled “Install”uv add lexigram-auditFor the SQL backend (recommended for production):
uv add "lexigram-audit[sql]"Minimal Wiring (Memory Backend)
Section titled “Minimal Wiring (Memory Backend)”import asynciofrom lexigram import Applicationfrom lexigram.audit import AuditBundleProvider, AuditConfig
config = AuditConfig(store_backend="memory")provider = AuditBundleProvider(config=config)
async def main() -> None: async with Application.boot( name="demo", providers=[provider], config=config, ) as app: print("Audit provider ready")
asyncio.run(main())Record and Query an Audit Entry
Section titled “Record and Query an Audit Entry”import asynciofrom datetime import UTC, datetimefrom lexigram import Applicationfrom lexigram.audit import AuditBundleProvider, AuditConfigfrom lexigram.contracts.audit import ( AuditEntry, AuditQuery, AuditEventSeverity, AuditLoggerProtocol,)
config = AuditConfig(store_backend="memory")provider = AuditBundleProvider(config=config)
async def main() -> None: async with Application.boot( name="demo", providers=[provider], config=config, ) as app: logger = await app.resolve(AuditLoggerProtocol)
await logger.log(AuditEntry( action="user.login", actor_id="user-42", severity=AuditEventSeverity.HIGH, metadata={"ip": "10.0.0.1"}, ))
results = await logger.query(AuditQuery(actor_id="user-42", limit=10)) print(f"Found {len(results)} entries")
asyncio.run(main())Next Steps
Section titled “Next Steps”- Guide — concepts and mental model
- Configuration — all config fields
- How-Tos — common recipes