UNPKG

@ones-open/node-host

Version:
61 lines (60 loc) 2.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.printfLogfmt = void 0; const config_1 = require("../config"); const protocol_1 = require("../protocol"); const api_1 = __importDefault(require("@opentelemetry/api")); const lodash_1 = require("lodash"); const moment_1 = __importDefault(require("moment")); const logs_1 = require("./logs"); // DEBUG 不在pb定义里,此处给一个-1的Level值,以便在本地日志中显示与索引 const DEBUG_LOG_LOCAL_LEVEL = -1; /** * 格式化日志,与开放平台日志格式一致 */ const printfLogfmt = (plugin) => (info) => { const { LogMessage } = protocol_1.protocol; const { level, message, statusCode, stack } = info; // 根据Logger的level,得到对应的pb级别 const LevelKey = (0, lodash_1.upperFirst)(level); const pbLevel = LogMessage.LogLevel[LevelKey] ?? DEBUG_LOG_LOCAL_LEVEL; const logRole = plugin ? LogMessage.LogRole.Plugin : LogMessage.LogRole.Host; // 错误logger未主动设置statusCode,默认设为500 let ErrorCode = statusCode?.toString() ?? null; if (!ErrorCode && [LogMessage.LogLevel.Error, LogMessage.LogLevel.Fatal].includes(pbLevel)) { ErrorCode = '500'; } // 日志内容限制长度1024字符 const msg = message?.length > 1024 ? message.substring(0, 1024) : message; const timest = (0, moment_1.default)().format(); // rfc3339 // 开启了才上报(默认开启,兼容以前的逻辑,后续会移除) // DEBUG 日志不能也不应该发送给平台,不然会导致重复JSON序列化,指数倍增\\\.... if (config_1.config.platform.report_log_interval > 0 && level !== 'debug') { const logMessage = { pbLevel, ErrorCode, Role: logRole, Timestamp: +Date.now().toString().slice(0, -3), Message: msg, CauseByMessage: stack, HostDescriptor: (0, protocol_1.createHostDescriptor)(), PluginInstanceDescriptor: plugin, }; logs_1.logs.add(logMessage); } const role = logRole === LogMessage.LogRole.Plugin ? 'Plugin' : 'Host'; const activeSpan = api_1.default.trace.getActiveSpan(); let traceId = '00000000000000000000000000000000'; if (activeSpan) { traceId = activeSpan.spanContext().traceId; } const infoMsg = `${info.message}`; return `time=${timest} level=${LevelKey} role=${role} app=${config_1.config.plugin.app_id} instance=${config_1.config.plugin.instance_id} msg=${quoteString(infoMsg)} trace_id=${traceId}`; }; exports.printfLogfmt = printfLogfmt; const quoteString = (str) => { return JSON.stringify(str.trim()); };