Node.js 命令行控制台日志级别

19

如何在命令行启动Node时设置日志级别?我承认,我是一个Node.js新手,但寻找类似于node myapp.js --loglevel warn的东西。


1
你说的“日志级别”是什么意思?由什么决定? - Joe
1
Node提供的日志记录功能很少,除了在未处理的异常上打印错误消息之外,没有日志级别需要设置。 - Rob Raisch
9
补充一下Rob所说的,console.log/console.warn/console.err方法只是将内容写到标准输出(stdout)/标准错误(stderr),这些方法名字并不能决定是否输出内容。 - Joe
4
谢谢,我现在正在使用这个库,如果有人感兴趣可以查看:https://github.com/visionmedia/log.js/ - kocodude
@kocodude 但是你如何根据环境变量过滤从 log.js 中看到的日志 - 就像你的问题一样?(我也有同样的问题)https://stackoverflow.com/questions/71082365/control-which-logs-are-shown-in-console-based-on-environment-variable - George Katsanos
2个回答

5

您可以重写console.log,console.debug,console.error,console.warn函数以允许logLevels。

查看我用typescript编写的片段:

export type LogLevel = "debug" | "log" | "warn" | "error" | "none";
let logLevels = ["debug", "log", "warn", "error", "none"];
let shouldLog = (level: LogLevel) => {
  // @ts-ignore
  return logLevels.indexOf(level) >= logLevels.indexOf(global.logLevel);
};

// @ts-ignore
global.logLevel = "debug";
let _console=console
global.console = {
  ...global.console,
  log: (message?: any, ...optionalParams: any[]) => {
    shouldLog("log")&&_console.log(message, ...optionalParams);
  },
  warn: (message?: any, ...optionalParams: any[]) => {
    shouldLog("warn") && _console.warn(message, ...optionalParams);
  },
  error: (message?: any, ...optionalParams: any[]) => {
    shouldLog("error") && _console.error(message, ...optionalParams);
  },
  debug: (message?: any, ...optionalParams: any[]) => {
    shouldLog("debug") && _console.debug(message, ...optionalParams);
  },
};

然后,您可以像往常一样使用console函数,并使用globals.logLevel="warn"设置日志级别,...


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接