@posthog/types
Version:
Type definitions for the PostHog JavaScript SDK
116 lines • 4.15 kB
TypeScript
/**
* Log capture types
*/
export type LogSeverityLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
export type OtlpSeverityText = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'FATAL';
export interface OtlpSeverityEntry {
text: OtlpSeverityText;
number: number;
}
export type LogAttributeValue = string | number | boolean | null | undefined | unknown[] | Record<string, unknown>;
export type LogAttributes = Record<string, LogAttributeValue>;
export interface CaptureLogOptions {
/** The log message body (required) */
body: string;
/** Log severity level (default: 'info') */
level?: LogSeverityLevel;
/** Trace ID for correlation — 32 hex chars */
trace_id?: string;
/** Span ID for correlation — 16 hex chars */
span_id?: string;
/** W3C trace flags (default: 0) */
trace_flags?: number;
/** Per-log attributes (request-specific context like order_id, duration_ms) */
attributes?: LogAttributes;
}
/**
* Pre-send filter. Inspect, mutate, or drop a captured log record before it
* enters the rate cap or the buffer. Return the (possibly transformed) record
* to keep it; return `null` to drop it.
*
* Configure as a single function or an array. Arrays form a left-to-right
* chain: each function receives the previous function's return value, and a
* `null` from any link short-circuits the chain and drops the record. A
* function that throws also drops the record (the error is logged).
*
* @example Redact secrets from log bodies
* ```ts
* logs: { beforeSend: (record) => ({ ...record, body: record.body.replace(/token=\S+/g, 'token=[REDACTED]') }) }
* ```
*/
export type BeforeSendLogFn = (record: CaptureLogOptions) => CaptureLogOptions | null;
/**
* Per-level convenience logger. Each method captures a structured log record
* at the corresponding severity, equivalent to
* `posthog.captureLog({ body, level, attributes })`.
*
* @example
* ```ts
* posthog.logger.info('checkout completed', { order_id: 'ord_789' })
* posthog.logger.error('payment failed', { code: 'E001' })
* ```
*/
export interface Logger {
/** Lowest severity. Trace-level diagnostic detail. */
trace(body: string, attributes?: LogAttributes): void;
/** Debug-level detail. Verbose, only useful while diagnosing. */
debug(body: string, attributes?: LogAttributes): void;
/** Informational. Normal app events worth recording. */
info(body: string, attributes?: LogAttributes): void;
/** Warning. Something unexpected but non-fatal. */
warn(body: string, attributes?: LogAttributes): void;
/** Error. Operation failed; the app may continue. */
error(body: string, attributes?: LogAttributes): void;
/** Fatal. Operation failed; the app likely cannot continue. */
fatal(body: string, attributes?: LogAttributes): void;
}
export interface OtlpAnyValue {
stringValue?: string;
/**
* proto3 JSON maps int64 to a string, which is the form the SDK emits.
* `number` stays valid because encoded records persist in the logs queue:
* one written by an earlier version rehydrates in the numeric form and is
* re-sent unchanged. The wire format accepts both.
*/
intValue?: string | number;
doubleValue?: number;
boolValue?: boolean;
arrayValue?: {
values: OtlpAnyValue[];
};
kvlistValue?: {
values: OtlpKeyValue[];
};
}
export interface OtlpKeyValue {
key: string;
value: OtlpAnyValue;
}
export interface OtlpLogRecord {
timeUnixNano: string;
observedTimeUnixNano: string;
severityNumber: number;
severityText: OtlpSeverityText;
body: {
stringValue: string;
};
attributes: OtlpKeyValue[];
traceId?: string;
spanId?: string;
flags?: number;
}
export interface OtlpLogsPayload {
resourceLogs: Array<{
resource: {
attributes: OtlpKeyValue[];
};
scopeLogs: Array<{
scope: {
name: string;
version?: string;
};
logRecords: OtlpLogRecord[];
}>;
}>;
}
//# sourceMappingURL=capture-log.d.ts.map