Files
NapCatQQ/.pnpm-store/v3/files/9a/7c97dae4fac500595a19031c45227363b4eca4c7ee9953093478eac3c6d8d493ae504fc106fc4069ce42eab55b66104d939e9e75b61d2476e6cb1412b43a43
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

108 lines
2.9 KiB
Plaintext

import format from "date-manip/dist/format.mjs";
import { isFunction } from "is-what-type";
import compilePattern from "./compilePattern.mjs";
import formatMessage from "./formatMessage.mjs";
import pad from "./pad.mjs";
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 (isFunction(createConverter)) {
const converter = createConverter(
specifier,
alignLeft,
minWidth,
maxLength,
format2
);
if (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("");
}
}
export {
PatternLayout as default
};