@loglayer/transport-google-cloud-logging
Version:
Google Cloud Logging (Stackdriver) transport for the LogLayer logging library.
1 lines • 3.92 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["BaseTransport","LogLevel"],"sources":["../src/GoogleCloudLoggingTransport.ts"],"sourcesContent":["import type { Log, LogSync } from \"@google-cloud/logging\";\nimport type { LogEntry } from \"@google-cloud/logging/build/src/entry.js\";\nimport type { LogLayerTransportConfig, LogLayerTransportParams } from \"@loglayer/transport\";\nimport { BaseTransport, LogLevel, type LogLevelType } from \"@loglayer/transport\";\n\nexport interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {\n /**\n * The root level data to include for all log entries.\n * \"severity\", \"timestamp\" and \"jsonPayload\" are already populated by the transport.\n * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n */\n rootLevelData?: Omit<\n LogEntry,\n \"severity\" | \"timestamp\" | \"receiveTimestamp\" | \"jsonPayload\" | \"textPayload\" | \"protoPayload\"\n >;\n\n /**\n * List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.\n */\n rootLevelMetadataFields?: Array<string>;\n}\n\nexport class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {\n private rootLevelData: GoogleCloudLoggingTransportConfig[\"rootLevelData\"];\n private rootLevelMetadataFields: Array<string>;\n\n constructor(config: GoogleCloudLoggingTransportConfig) {\n super(config);\n this.rootLevelData = config.rootLevelData || {};\n this.rootLevelMetadataFields = config.rootLevelMetadataFields ?? [];\n }\n\n private mapLogLevel(level: LogLevelType): string {\n switch (level) {\n case LogLevel.fatal:\n return \"CRITICAL\";\n case LogLevel.error:\n return \"ERROR\";\n case LogLevel.warn:\n return \"WARNING\";\n case LogLevel.info:\n return \"INFO\";\n case LogLevel.debug:\n return \"DEBUG\";\n case LogLevel.trace:\n return \"DEBUG\";\n default:\n return \"DEFAULT\";\n }\n }\n\n private extractLogEntryFields(data: Record<string, unknown>) {\n const keys = Object.keys(data);\n const metadata: Record<string, unknown> = {};\n\n for (const key of keys) {\n if (this.rootLevelMetadataFields.includes(key)) {\n metadata[key] = data[key];\n delete data[key];\n }\n }\n\n return metadata;\n }\n\n shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[] {\n const safeData = data && hasData ? data : {};\n const metadata = this.extractLogEntryFields(safeData);\n\n const entry = this.logger.entry(\n {\n ...this.rootLevelData,\n ...metadata,\n severity: this.mapLogLevel(logLevel),\n timestamp: new Date(),\n },\n {\n ...safeData,\n message: messages.join(\" \"),\n },\n );\n\n this.logger.write(entry);\n\n if (data && hasData) {\n return [data, messages];\n }\n\n return [messages];\n }\n}\n"],"mappings":";;;;AAsBA,IAAa,8BAAb,cAAiDA,kCAA6B;CAC5E,AAAQ;CACR,AAAQ;CAER,YAAY,QAA2C;AACrD,QAAM,OAAO;AACb,OAAK,gBAAgB,OAAO,iBAAiB,EAAE;AAC/C,OAAK,0BAA0B,OAAO,2BAA2B,EAAE;;CAGrE,AAAQ,YAAY,OAA6B;AAC/C,UAAQ,OAAR;GACE,KAAKC,6BAAS,MACZ,QAAO;GACT,KAAKA,6BAAS,MACZ,QAAO;GACT,KAAKA,6BAAS,KACZ,QAAO;GACT,KAAKA,6BAAS,KACZ,QAAO;GACT,KAAKA,6BAAS,MACZ,QAAO;GACT,KAAKA,6BAAS,MACZ,QAAO;GACT,QACE,QAAO;;;CAIb,AAAQ,sBAAsB,MAA+B;EAC3D,MAAM,OAAO,OAAO,KAAK,KAAK;EAC9B,MAAM,WAAoC,EAAE;AAE5C,OAAK,MAAM,OAAO,KAChB,KAAI,KAAK,wBAAwB,SAAS,IAAI,EAAE;AAC9C,YAAS,OAAO,KAAK;AACrB,UAAO,KAAK;;AAIhB,SAAO;;CAGT,aAAa,EAAE,MAAM,SAAS,UAAU,YAA4C;EAClF,MAAM,WAAW,QAAQ,UAAU,OAAO,EAAE;EAC5C,MAAM,WAAW,KAAK,sBAAsB,SAAS;EAErD,MAAM,QAAQ,KAAK,OAAO,MACxB;GACE,GAAG,KAAK;GACR,GAAG;GACH,UAAU,KAAK,YAAY,SAAS;GACpC,2BAAW,IAAI,MAAM;GACtB,EACD;GACE,GAAG;GACH,SAAS,SAAS,KAAK,IAAI;GAC5B,CACF;AAED,OAAK,OAAO,MAAM,MAAM;AAExB,MAAI,QAAQ,QACV,QAAO,CAAC,MAAM,SAAS;AAGzB,SAAO,CAAC,SAAS"}