UNPKG

@loglayer/transport-victoria-logs

Version:

VictoriaLogs transport for the LogLayer logging library.

1 lines 5.64 kB
{"version":3,"file":"index.cjs","names":["HttpTransport"],"sources":["../src/VictoriaLogsTransport.ts"],"sourcesContent":["import type { HttpTransportConfig } from \"@loglayer/transport-http\";\nimport { HttpTransport } from \"@loglayer/transport-http\";\n\n/**\n * Configuration options for the VictoriaLogs transport.\n * This is essentially a wrapper around HttpTransport with VictoriaLogs specific defaults.\n */\nexport interface VictoriaLogsTransportConfig extends Omit<HttpTransportConfig, \"url\" | \"payloadTemplate\"> {\n /**\n * The VictoriaLogs host URL (e.g., http://localhost:9428)\n * The /insert/jsonline path will be automatically appended\n * @default \"http://localhost:9428\"\n */\n url?: string;\n /**\n * Function to transform log data into the payload format (optional, defaults to VictoriaLogs format)\n */\n payloadTemplate?: (data: { logLevel: string; message: string; data?: Record<string, any> }) => string;\n /**\n * Function to generate stream-level fields for VictoriaLogs\n * The keys of the returned object will be used as the values for the _stream_fields parameter\n * @default () => ({})\n */\n streamFields?: () => Record<string, string>;\n /**\n * Function to generate the timestamp for the _time field\n * @default () => new Date().toISOString()\n */\n timestamp?: () => string;\n /**\n * Custom HTTP query parameters for VictoriaLogs ingestion\n * @see https://docs.victoriametrics.com/victorialogs/data-ingestion/#http-parameters\n */\n httpParameters?: Record<string, string>;\n}\n\n/**\n * VictoriaLogs transport for LogLayer.\n *\n * This transport is a thin wrapper around the HttpTransport that provides\n * VictoriaLogs specific defaults and configuration. It uses the VictoriaLogs\n * JSON stream API to send logs.\n *\n * @see https://docs.victoriametrics.com/victorialogs/data-ingestion/#json-stream-api\n */\nexport class VictoriaLogsTransport extends HttpTransport {\n constructor(config: VictoriaLogsTransportConfig = {}) {\n const {\n url = \"http://localhost:9428\",\n method = \"POST\",\n headers = {\n \"Content-Type\": \"application/stream+json\",\n },\n contentType = \"application/stream+json\",\n batchContentType = \"application/stream+json\",\n streamFields = () => ({}),\n timestamp = () => new Date().toISOString(),\n httpParameters = {},\n payloadTemplate = ({ logLevel, message, data }) => {\n const streamFieldsData = streamFields();\n const timeValue = timestamp();\n\n // Determine field names based on HTTP parameters\n const msgField = httpParameters._msg_field || \"_msg\";\n const timeField = httpParameters._time_field || \"_time\";\n\n return JSON.stringify({\n [msgField]: message || \"(no message)\",\n [timeField]: timeValue,\n level: logLevel,\n ...streamFieldsData,\n ...data,\n });\n },\n compression = false,\n maxRetries = 3,\n retryDelay = 1000,\n respectRateLimit = true,\n enableBatchSend = true,\n batchSize = 100,\n batchSendTimeout = 5000,\n batchSendDelimiter = \"\\n\",\n maxLogSize = 1048576, // 1MB\n maxPayloadSize = 5242880, // 5MB\n enableNextJsEdgeCompat = false,\n onError,\n onDebug,\n ...restConfig\n } = config;\n\n // Get stream fields and use their keys as _stream_fields parameter\n const streamFieldsData = streamFields();\n const streamFieldsKeys = Object.keys(streamFieldsData);\n\n // Merge HTTP parameters, adding _stream_fields if streamFields has keys\n const finalHttpParameters = {\n ...httpParameters,\n ...(streamFieldsKeys.length > 0 && { _stream_fields: streamFieldsKeys.join(\",\") }),\n };\n\n // Construct the full URL with the VictoriaLogs JSON stream API endpoint and query parameters\n const baseUrl = `${url.replace(/\\/$/, \"\")}/insert/jsonline`;\n const queryParams = new URLSearchParams(finalHttpParameters);\n const fullUrl = queryParams.toString() ? `${baseUrl}?${queryParams.toString()}` : baseUrl;\n\n super({\n url: fullUrl,\n method,\n headers,\n contentType,\n batchContentType,\n payloadTemplate,\n compression,\n maxRetries,\n retryDelay,\n respectRateLimit,\n enableBatchSend,\n batchSize,\n batchSendTimeout,\n batchSendDelimiter,\n maxLogSize,\n maxPayloadSize,\n enableNextJsEdgeCompat,\n onError,\n onDebug,\n ...restConfig,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA6CA,IAAa,wBAAb,cAA2CA,uCAAc;CACvD,YAAY,SAAsC,EAAE,EAAE;EACpD,MAAM,EACJ,MAAM,yBACN,SAAS,QACT,UAAU,EACR,gBAAgB,2BACjB,EACD,cAAc,2BACd,mBAAmB,2BACnB,sBAAsB,EAAE,GACxB,mCAAkB,IAAI,MAAM,EAAC,aAAa,EAC1C,iBAAiB,EAAE,EACnB,mBAAmB,EAAE,UAAU,SAAS,WAAW;GACjD,MAAM,mBAAmB,cAAc;GACvC,MAAM,YAAY,WAAW;GAG7B,MAAM,WAAW,eAAe,cAAc;GAC9C,MAAM,YAAY,eAAe,eAAe;AAEhD,UAAO,KAAK,UAAU;KACnB,WAAW,WAAW;KACtB,YAAY;IACb,OAAO;IACP,GAAG;IACH,GAAG;IACJ,CAAC;KAEJ,cAAc,OACd,aAAa,GACb,aAAa,KACb,mBAAmB,MACnB,kBAAkB,MAClB,YAAY,KACZ,mBAAmB,KACnB,qBAAqB,MACrB,aAAa,SACb,iBAAiB,SACjB,yBAAyB,OACzB,SACA,SACA,GAAG,eACD;EAGJ,MAAM,mBAAmB,cAAc;EACvC,MAAM,mBAAmB,OAAO,KAAK,iBAAiB;EAGtD,MAAM,sBAAsB;GAC1B,GAAG;GACH,GAAI,iBAAiB,SAAS,KAAK,EAAE,gBAAgB,iBAAiB,KAAK,IAAI,EAAE;GAClF;EAGD,MAAM,UAAU,GAAG,IAAI,QAAQ,OAAO,GAAG,CAAC;EAC1C,MAAM,cAAc,IAAI,gBAAgB,oBAAoB;EAC5D,MAAM,UAAU,YAAY,UAAU,GAAG,GAAG,QAAQ,GAAG,YAAY,UAAU,KAAK;AAElF,QAAM;GACJ,KAAK;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,GAAG;GACJ,CAAC"}