import type { Format } from 'logform'; import type { LoggerOptions } from 'winston'; import Transport from 'winston-transport'; import { Environment } from '../../types/Envinronment'; export type GetTraceFn = () => { traceId: string; spanId: string; traceSampled?: boolean; }; export type GetLabelsFn = () => Record; export interface WinstonCloudRunConfig { appName: string; appVersion: string; environment: Environment; production: boolean; getTrace?: GetTraceFn; getLabels?: GetLabelsFn; } export interface CloudRunJsonTransportOptions extends Transport.TransportStreamOptions { appName?: string; appVersion?: string; environment?: string; } export declare class CloudRunJsonTransport extends Transport { private appName; private appVersion; private environment; constructor(opts?: CloudRunJsonTransportOptions); log(info: Record, callback: () => void): void; } /** * Creates Winston config optimized for Cloud Run structured logging. * * - **Local:** Colorized console output at debug level * - **Production:** Structured JSON to stdout at info level (parsed by Cloud * Logging as `jsonPayload` with proper severity, labels, and trace correlation) * - **Non-local non-prod (dev/staging):** Structured JSON at debug level */ export declare function getWinstonCloudRunConfig({ appName, appVersion, production, environment, getTrace, getLabels, }: WinstonCloudRunConfig): LoggerOptions; /** * Creates Winston format that specifies time and renames level to severity */ export declare function getCloudLoggingFormat({ getTrace, getLabels, environment, }?: Pick): Format;