日期工具类:
function jsUtils() { };
jsUtils.dateFormat = function(fmt, date) {
let ret;
const opt = {
"y+": date.getFullYear().toString(), // 年
"M+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"h+": date.getHours().toString(), // 时
"m+": date.getMinutes().toString(), // 分
"s+": date.getSeconds().toString(), // 秒
"S+": (date.getTime() % 1000) + "", // 毫秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
日志工具类:
var logger = function() {
var levels = {
trace: {
levelStyle: 'background:#77787b; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background:#77787b; color: #fff; border-radius: 3px 0 0 3px;',
level: 0,
name: "trace"
},
debug: {
levelStyle: 'background: #3c3645; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background: #3c3645; color: #fff; border-radius: 3px 0 0 3px;',
level: 1,
name: "debug"
},
info: {
levelStyle: 'background: #005831; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background: #005831; color: #fff; border-radius: 3px 0 0 3px;',
level: 2,
name: "info"
},
warn: {
levelStyle: 'background: #f58220; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background: #f58220; color: #fff; border-radius: 3px 0 0 3px;',
level: 3,
name: "warn"
},
error: {
levelStyle: 'background: #d71345; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background: #d71345; color: #fff; border-radius: 3px 0 0 3px;',
level: 4,
name: "error"
},
fatal: {
levelStyle: 'background: #a7324a; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: ' color: #a7324a; border-radius: 3px 0 0 3px;',
level: 5,
name: "fatal"
},
off: {
levelStyle: 'background: #005831; color: #fff; border-radius: 3px 0 0 3px;',
dateStyle: 'background: #1475B2; color: #fff; border-radius: 3px 0 0 3px;',
methodStyle: 'background: #2F4F4F; color: #fff; border-radius: 3px 0 0 3px;',
lineStyle: 'color: #fff; border-radius: 3px 0 0 3px;',
infoStyle: 'background: #005831; color: #fff; border-radius: 3px 0 0 3px;',
level: 6,
name: "off"
}
}
logger.prototype.dateformat = "yyyy-MM-dd hh:mm:ss:SSS";
logger.prototype.levels = levels;
logger.prototype.useLevel = levels.info;
logger.prototype.print = function(level, msg,... params) {
if (level.level < logger.useLevel.level) {
return;
}
let infoArg = [];
for (let i = 2; i < arguments.length; i++) {
infoArg = arguments[i];
}
let fullMsg = "";
fullMsg += "%c";
fullMsg += jsUtils.dateFormat("hh:mm:ss.SSS", new Date());
fullMsg += "%c";
fullMsg += "[" + level.name + "] ";
fullMsg += "%c -- %c"
fullMsg += msg;
console.info(fullMsg, level.dateStyle, level.levelStyle, level.lineStyle, level.infoStyle,... params);
};
logger.prototype.trace = function(msg,... params) {
logger.print(logger.levels.trace, msg,... params);
};
logger.prototype.debug = function(msg, ... params) {
logger.print(logger.levels.debug, msg, ... params);
};
logger.prototype.info = function(msg, ... params) {
logger.print(logger.levels.info, msg, ... params);
};
logger.prototype.warn = function(msg, ... params) {
logger.print(logger.levels.warn, msg, ... params);
};
logger.prototype.error = function(msg, ... params) {
logger.print(logger.levels.error,msg, ... params);
};
logger.prototype.fatal = function(msg, ... params) {
logger.print(logger.levels.fatal, msg, ... params);
};
};
logger = new logger();
测试代码:
function test() {
logger.useLevel = logger.levels.trace;
let temp = 1314;
let text = "这是文本文本";
let date =new Date();
let obj={
name:"张山",
age:64
}
logger.trace("低级别调试消息 数字:%O 文本:%O 日期:%O 对象:%O", temp, text,date,obj);
logger.debug("调试消息 数字:%O 文本:%O 日期:%O 对象:%O", temp, text,date,obj);
logger.warn("警告消息 数字:%O 文本:%O 日期:%O 对象:%O", temp, text,date,obj);
logger.error("错误消息 数字:%O 文本:%O 日期:%O 对象:%O", temp, text,date,obj);
logger.fatal("致命错误消息 数字:%O 文本:%O 日期:%O 对象:%O", temp, text,date,obj);
}
test();
测试结果: