Files
NapCatQQ/.pnpm-store/v3/files/28/19a35ea3c766841e8658c1c81dea2ed424a9f8cb90d02692739f5b18c3c753d15877e105f4d580a7ca68ec93c114b6fb87bf136d2661f6d3b6a7ea63996d2a
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

107 lines
3.0 KiB
Plaintext

"use strict";
const format = require("date-manip/dist/format");
const isWhatType = require("is-what-type");
const compilePattern = require("./compilePattern.js");
const formatMessage = require("./formatMessage.js");
const pad = require("./pad.js");
function literalConverter(text) {
return () => text;
}
function dateConverter(dateFormat = "ISO") {
return (event) => {
return format(event.timestamp, dateFormat);
};
}
function levelConverter(minWidth = 0, alignLeft = true) {
return (event) => {
return pad(event.levelName, minWidth, alignLeft);
};
}
function loggerConverter(minWidth = 0, alignLeft = true) {
return (event) => {
const { loggerName } = event;
return pad(loggerName, minWidth, alignLeft);
};
}
function messageConverter(minWidth = 0, maxLength = 0, alignLeft = true) {
return (event) => {
return formatMessage(event.message, (msg) => {
if (maxLength > 0 && msg.length > maxLength) {
msg = `${msg.substring(0, maxLength)}...`;
}
return pad(msg, minWidth, alignLeft);
});
};
}
function threadConverter() {
return () => {
return `PID:${process.pid}`;
};
}
function mdcConverter(key, minWidth = 0, alignLeft = true) {
return (event) => {
const value = event.context[key] || "";
return pad(String(value), minWidth, alignLeft);
};
}
class PatternLayout {
/**
* Constructor (构造函数)
* @param pattern Pattern string (模版字符串)
*/
constructor(pattern = "[%d{YYYY-MM-DD HH:mm:ss.SSSZ}] %p %c - %m", createConverter) {
this.converters = compilePattern(
pattern,
(specifier, alignLeft, minWidth, maxLength, format2) => {
if (isWhatType.isFunction(createConverter)) {
const converter = createConverter(
specifier,
alignLeft,
minWidth,
maxLength,
format2
);
if (isWhatType.isFunction(converter)) {
return converter;
}
}
switch (specifier.toLowerCase()) {
case "%":
return literalConverter("%");
case "d":
return dateConverter(format2);
case "p":
return levelConverter(minWidth, alignLeft);
case "c":
return loggerConverter(minWidth, alignLeft);
case "m":
return messageConverter(minWidth, maxLength, alignLeft);
case "t":
return threadConverter();
case "x":
return mdcConverter(format2 || "", minWidth, alignLeft);
default:
return literalConverter(`%${specifier}`);
}
},
literalConverter
);
}
/**
* Add a converter (添加转换器)
* @param fn Converter function (转换器函数)
*/
use(fn) {
this.converters.push(fn);
return this;
}
/**
* Format a log event (格式化日志事件)
* @param event Log event (日志事件)
*/
format(event) {
return this.converters.map((converter) => converter(event)).join("");
}
}
module.exports = PatternLayout;