@kids-reporter/logger
v0.0.2
Published
Shared structured logger for Kids Reporter services
Readme
@kids-reporter/logger
Shared structured logger and trace utilities for Kids Reporter services. Uses Google Cloud X-Cloud-Trace-Context to propagate a single traceId so that logs can be correlated in GCP Cloud Logging via logging.googleapis.com/trace.
Types
LogSeverity—'DEBUG' | 'INFO' | 'NOTICE' | 'WARNING' | 'ERROR' | 'ALERT' | 'CRITICAL'StructuredLogPayload—{ severity: LogSeverity; message?: string } & Record<string, unknown>TraceHeaderInput—Headers | Record<string, string | undefined | unknown> | undefinedNormalizedTraceContext—{ traceId: string; traceHeaders: { 'X-Cloud-Trace-Context': string } }
API
normalizeTraceContext(headersInput?, options?)
Parses trace context from the X-Cloud-Trace-Context header (GCP format). Optionally generates a new trace ID when the header is missing.
headersInput— Request headers (e.g.Headersor plain object).options.generateIfMissing— Iftrue(default), creates a new trace ID when the header is missing; iffalse, returnsundefinedin that case.
Returns: NormalizedTraceContext or undefined.
import { normalizeTraceContext } from '@kids-reporter/logger'
const ctx = normalizeTraceContext(request.headers)
// ctx.traceId, ctx.traceHeaders['X-Cloud-Trace-Context']getTraceLogFields(headersInput?, options?)
Builds an object of trace-related fields for structured logging. Includes logging.googleapis.com/trace when projectId is set for GCP log correlation.
headersInput— Same asnormalizeTraceContext.options.projectId— GCP project ID for the trace field; falls back toGOOGLE_CLOUD_PROJECTorGCP_PROJECTenv vars.options.generateIfMissing— Same asnormalizeTraceContext(defaultfalsehere).
Returns: Object with traceId and optionally logging.googleapis.com/trace.
import { getTraceLogFields } from '@kids-reporter/logger'
const fields = getTraceLogFields(req.headers, { projectId: 'my-gcp-project' })
console.log(JSON.stringify({ ...fields, message: 'Request processed' }))getGcpTraceField({ projectId, traceId })
Returns the GCP trace resource name: projects/{projectId}/traces/{traceId}. Returns undefined if projectId or traceId is missing.
emitStructured(payload)
Writes a structured log entry to the console as JSON. Uses console.error for ERROR/ALERT/CRITICAL, console.warn for WARNING, and console.log for others.
import { emitStructured } from '@kids-reporter/logger'
emitStructured({
severity: 'INFO',
message: 'User signed in',
userId: 'usr_123',
...getTraceLogFields(request.headers),
})