调试器
Deno / 节点JS 彩色日志
对于德诺语的使用,是指 deno- logger 医生
用途
控制台记录器
import Logger from "@denodnt/logger";
const logger = new Logger();
logger.info("i am from consoleLogger", { name: "zfx" });
logger.warn("i am from consoleLogger", 1, "any");
logger.error("i am from consoleLogger", new Error("test"));
文件与控制台日志
import Logger from "@denodnt/logger";
const logger = new Logger();
// console only
logger.info("i am from consoleLogger", { name: "zfx" });
logger.warn("i am from consoleLogger", 1, "any");
logger.error("i am from consoleLogger", new Error("test"));
await logger.initFileLogger("../log");
// file and console
logger.info("i am from fileLogger", { name: "zfx" });
logger.warn("i am from fileLogger", 1, "any");
logger.error("i am from fileLogger", new Error("test"));
仅文件日志
import Logger from "@denodnt/logger";
const logger = new Logger();
await logger.initFileLogger("../log");
logger.disableConsole();
// file only
logger.info(["i am from fileLogger", 1], { name: "zfx" });
文件日志选项参数
接口
interface fileLoggerOptions {
rotate?: boolean; // cut by day
maxBytes?: number;
// Only available if maxBytes is provided, Otherwise you will get an error
maxBackupCount?: number;
}
实例
import Logger from "@denodnt/logger";
const logger = new Logger();
// cut by day
// filename is [date]_[type].log
// example 2020-05-25_warn.log, 2020-05-25_info.log, 2020-05-25_error.log
await logger.initFileLogger("../log", {
rotate: true,
});
// maxBytes
// filename is [type].log.[timestamp]
// example: info.log.1590374415956
await logger.initFileLogger("../log", {
maxBytes: 10 * 1024,
});
// rotate and maxBytes
// filename is [date]_[type].log.[timestamp]
// example: 2020-05-25_info.log.1590374415956
await logger.initFileLogger("../log", {
rotate: true,
maxBytes: 10 * 1024,
});
// maxBytes and maxBackupCount
// filename is [type].log.[n]
// example info.log.1, info.log.2 ...
// when reach maxBackupCount, the [type].log.[maxBackupCount-1] will be overwrite
// detail:
// `maxBytes` specifies the maximum size
// in bytes that the log file can grow to before rolling over to a new one. If the
// size of the new log message plus the current log file size exceeds `maxBytes`
// then a roll over is triggered. When a roll over occurs, before the log message
// is written, the log file is renamed and appended with `.1`. If a `.1` version
// already existed, it would have been renamed `.2` first and so on. The maximum
// number of log files to keep is specified by `maxBackupCount`. After the renames
// are complete the log message is written to the original, now blank, file.
//
// Example: Given `log.txt`, `log.txt.1`, `log.txt.2` and `log.txt.3`, a
// `maxBackupCount` of 3 and a new log message which would cause `log.txt` to
// exceed `maxBytes`, then `log.txt.2` would be renamed to `log.txt.3` (thereby
// discarding the original contents of `log.txt.3` since 3 is the maximum number of
// backups to keep), `log.txt.1` would be renamed to `log.txt.2`, `log.txt` would
// be renamed to `log.txt.1` and finally `log.txt` would be created from scratch
// where the new log message would be written.
await logger.initFileLogger("../log", {
maxBytes: 10 * 1024,
maxBackupCount: 10,
});
// rotate and maxBytes and maxBackupCount
// filename is [date]_[type].log.[n]
// example 2020-05-25_info.log.1, 2020-05-25_info.log.2
// when reach maxBackupCount, the [type].log.[maxBackupCount-1] will be overwrite
await logger.initFileLogger("../log", {
rotate: true,
maxBytes: 10 * 1024,
maxBackupCount: 10,
});
// rotate and maxBackupCount
// maxBackupCount will be ignored
await logger.initFileLogger("../log", {
rotate: true,
maxBackupCount: 10,
});
以下条件将丢出一个错误
// maxBackupCount
// get error => maxBackupCount must work with maxBytes
await logger.initFileLogger("../log", {
maxBackupCount: 10,
});
// rotate and maxBackupCount
// get error => maxBackupCount must work with maxBytes
await logger.initFileLogger("../log", {
rotate: true,
maxBackupCount: 10,
});
禁用控制台并启用控制台
import Logger from "@denodnt/logger";
const logger = new Logger();
// console
logger.info("console enabled, you can see me");
logger.disableConsole();
// no message is logged
logger.info("console disabled");
logger.enableConsole();
// console
logger.info("console enabled, you can see me");
禁用文件并启用文件
import Logger from "@denodnt/logger";
const logger = new Logger();
await logger.initFileLogger("../log");
logger.disableFile();
// not log to file
logger.info("file disbaled");
logger.enableFile();
// log to file
logger.info("file enabled, you can see me");
禁用和启用
- 禁用写入文件和终端, 不要管它是否是当前 写入文件或终端,但希望恢复当前配置 待会
- 启用恢复先前的日志配置:文件、终端或两者兼有
示例:
- 文件盗取者 禁用文件盗取者
- 控制台Logger 禁用 QQ 启用 QQ 控制台Logger
- 文件
import Logger from "@denodnt/logger";
const logger = new Logger();
await logger.initFileLogger("../log");
logger.disable();
logger.enable();
测试
deno test --allow-read --allow-write
双层/ 三层集成
双层工程是一般的 npm 项目,可以导入为普通JS 模块或作为无害环境管理模块; 所以如果一个工程也可以作为德诺模块导入, 是个三重锁.
要将您的 Deno 项目转换为双层 npm 项目, 您应该使用
值/值,然后创建 _build_npm.ts 或者说
scripts/build_npm.ts 看起来像:
import { build, emptyDir } from "@deno/dnt";
// grap the next version number as you want
const version: Deno.args[0];
await emptyDir("./npm");
await build({
entryPoints: ["./mod.ts"],
outDir: "./npm",
shims: {
deno: true,
},
compilerOptions: {
lib: ["dom", "esnext"],
},
package: {
name: "pkg-name",
version: version,
// ... package stuff
},
// map your favorite deno logger to its npm port.
mappings: {
"@denodnt/logger": {
name: "@denodnt/logger",
version: "1.1.6",
peerDependency: false,
},
},
});
截图
控制台

文件缓存

日切日志

更多截图 screenshots 文件夹.
锁定接口
interface fileLoggerOptions {
rotate?: boolean; // cut by day
maxBytes?: number, // the maximum size in bytes that the log file can grow to before rolling over to a new one
maxBackupCount?: number // maxBackupCount must work with maxBytes
}
interface LoggerInerface {
constructor()
info(...args: unknown[]): void
warn(...args: unknown[]): void
error(...args: unknown[]): void
async initFileLogger(dir: string, options: fileLoggerOptions = {}): Promise<void>
disableConsole(): void
enableConsole(): void
disableFile(): void;
enableFile(): void;
disable(): void;
enable(): void;
}