LOADING...
RLog 是一个旨在让 console.log 变得更加优雅的 Node.js 端日志库。它不仅支持自动着色、时间戳添加、信息等级判断以及高性能的文件异步写入,还提供了进度条显示、隐私内容隐藏及灵活的配置选项,帮助开发者通过简单的 API 替换实现更高效的调试与记录。
RLog,实际上是我高中时期与我的一个同学一起开发的NodeJs端log库,我负责所有主要功能,他负责写类型注释。
当初做这个的初衷就是想让每次console.log变得更加优雅——不仅仅是为了调试,也是为了显示与记录。
从结果上来看,上手是非常简单的。你只需要把所有console.log替换为rlog.log,RLog就能帮你完成一切日志相关的操作。这包括但不限于:
从这些方面来看,RLog已经符合“优雅”的初衷了。本文会详细介绍RLog的进阶内容,助你的NodeJs编程一臂之力。
image.png
上图是RLog中全部效果的展示,其功能主要有:
YYYY-MM-DD HH:mm:ss.SSS,你可以自定义修改这个字符串,也可以使用预设(UTC/ISO/timestamp)rlog.onExit(() => {})等rlog.log("Hello world!", "This is a message", 123, true);,不过rlog.log会自动添加时间并自动判断输出内容的等级,十分优雅。rlog.file.info()的方法仅向其中一个输出。例如,你可以将详细的运行信息输出到文件,而保证屏幕输出的整洁可读。使用npm进行安装:
使用rlog-js非常简单,首先导入rlog-js:
然后创建一个Rlog实例:
接下来就可以使用各种接口来输出日志了。
具体来说,./test.js中有大量对rlog的调用示例,以供查看。
一个最简单的使用示例如下:
Rlog是rlog-js的主类,用于创建日志实例,会自动调用File和Screen方法。它具有以下方法:
Config是一个用于配置rlog-js的类。可设置的项,详见#配置。
Config类提供了以下方法:
Toolkit是一个工具类,用于提供一些常用的工具函数。它具有以下方法:
Screen是用于在控制台打印日志的类。调用此方法,将仅在屏幕中输出,不会写入至文件。它具有以下方法:
File是用于将日志写入文件的类。调用此方法,若已设置日志文件路径,将会写入至文件,不会在屏幕输出。它具有以下方法:
rlog-js提供了一个回调,用来在退出程序之前执行(如显示issue report提示等)
rlog-js提供了一个进度条,可以在控制台中显示进度条。
一个可用的示例如下:
图片
rlog-js还提供了一些配置选项,可以在创建Rlog实例时进行配置,也可以使用和或者以的方式设置。
以下是可用的配置选项及其默认值:
可以通过传递一个配置对象来配置Rlog实例:
或者使用相关函数设置:
info(message)warning(message)error(message)success(message)exit(message)log(message)progress(num,max)enableColorfulOutputlogFilePathtimeFormattimezoneblockedWordsListcustomColorRulesscreenLengthsetConfig(obj)setConfigGlobal(obj)checkLogFile(path)colorizeString(str)formatTime()encryptPrivacyContent(str)colorizeType(variable)padLines(str, width)info(message, time)warning(message, time)error(message, time)success(message, time)exit(message, time)init()writeLogToStream(text)writeLog(text)info(message, time)warning(message, time)error(message, time)success(message, time)exit(message, time)onExitprogresssetConfig()setConfigGlobal()rlog.config[config] = <value>npm install rlog-jsconst Rlog = require("rlog-js");const rlog = new Rlog();const Rlog = require("rlog-js");
const rlog = new Rlog({
enableColorfulOutput: true,
logFilePath: "logs.txt",
});
rlog.config.setConfig({
timeFormat: "YYYY-MM-DD HH:mm:ss",
timezone: "Asia/Shanghai",
blockedWordsList: ["password", "secret"],
});
rlog.info("This is an information log");
rlog.log("This is an automatically recognized type of log output");
rlog.warning("This is a warning log");
rlog.error("This is an error log");
rlog.success("This is a success log");
rlog.exit("This is a secure exit method");rlog.onExit(() => {
console.log('rlog.exit() called and event triggered.');
});rlog.methodName();rlog.config;rlog.toolkit.methodName();rlog.screen.methodName();rlog.file.methodName();const Rlog = require("./index.js");
const rlog = new Rlog();
rlog.log('当一个progress单独出现时,不会影响上下文')
rlog.progress(168,1668)
rlog.log('当更多progress一块出现时,屏幕只显示最新的')
let i = 0
let a = setInterval(()=>{
i +=1
if (i == 234) {
clearImmediate(a)
process.exit()
}
rlog.progress(i,233)
},10){
enableColorfulOutput: true,
// 是否启用彩色输出
logFilePath: undefined,
// 日志文件路径,如果不设置则不会输出到文件
timeFormat: "YYYY-MM-DD HH:mm:ss.SSS",
// 时间格式
timezone: "GMT",
// 时区
blockedWordsList: [],
// 需要屏蔽的词汇列表
customColorRules: [// 自定义颜色规则
{
reg: "false",
color: "red",
},
{
reg: "true",
color: "green",
},
{
reg: "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}",
color: "cyan",
},
{
reg: "[a-zA-z]+://[^\\s]*",
color: "cyan",
},
{
reg: "\\d{4}-\\d{1,2}-\\d{1,2}",
color: "green",
},
{
reg: "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*",
color: "cyan",
},
{
reg: "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",
color: "cyan",
},
{
reg: "(w+)s*:s*([^;]+)",
color: "cyan",
},
]
}const config = {
enableColorfulOutput: true,
logFilePath: "/path/to/logfile.log",
timeFormat: "YYYY-MM-DD HH:mm:ss.SSS",
timezone: "GMT",
blockedWordsList: ["password", "secret"],
customColorRules: [
{
reg: "error",
color: "red",
},
{
reg: "warning",
color: "yellow",
},
{
reg: "success",
color: "green",
},
],
};
const rlog = new Rlog(config);rlog.config.setConfig({
timeFormat: "YYYY-MM-DD HH:mm:ss",
timezone: "Asia/Shanghai",
blockedWordsList: ["password", "secret"],
});
rlog.config.setConfigGlobal({
timeFormat: "YYYY-MM-DD HH:mm:ss",
timezone: "Asia/Shanghai",
blockedWordsList: ["password", "secret"],
});
评论