@ones-open/node-host
Version:
ONES Open Platform Node.js plugin host
61 lines (60 loc) • 2.84 kB
JavaScript
;
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());
};