Nodejs分享一个小技巧,运行日志写入文件

Nodejs分享一个小技巧,运行日志写入文件

一般在控制台node app 启动程序,但是日志多了就看不到. 在官网上看到这个

$ node script.js 2> error.log | tee info.log

在win下,就换了一下

node app 1>info.log

果然所有的console都写入文件了.不过不能按日期写文件,就继续搜索了一下,最后

node app 1>info%date:~0,4%-%date:~5,2%-%date:~8,2%.log

写入bat文件就行了.


2 回复

Nodejs分享一个小技巧: 运行日志写入文件

在开发和维护Node.js应用时,我们经常需要查看应用程序的运行日志。通常情况下,我们会在控制台中运行 node app.js 来启动程序,但随着日志信息越来越多,手动查看控制台变得不太现实。

解决方案

我们可以将日志信息直接写入到文件中,以便后续分析和调试。以下是一些简单的命令来实现这一目标。

在Unix/Linux系统上

首先,我们可以在终端中使用管道和重定向操作符来将日志输出重定向到文件中。例如:

$ node app.js 2> error.log | tee info.log

这里:

  • 2> 表示将标准错误(stderr)重定向到 error.log 文件。
  • | tee info.log 表示将标准输出(stdout)同时显示在终端并写入 info.log 文件。
在Windows系统上

在Windows系统中,可以使用类似的命令来实现同样的效果。例如:

node app.js > info.log

这会将所有标准输出(stdout)写入到 info.log 文件中。

按日期生成日志文件

如果希望根据日期自动生成日志文件名,可以使用批处理脚本(batch file)来实现。例如,在Windows环境下,创建一个批处理文件 run_app.bat 并添加以下内容:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
    set datestr=%%c-%%b-%%a
)
node app.js > info_%datestr%.log

这段脚本会获取当前日期,并将其格式化为 YYYY-MM-DD 的形式,然后用该日期作为日志文件名的一部分。这样,每次运行脚本时都会生成一个新的日志文件。

总结

通过上述方法,我们可以方便地将Node.js应用程序的日志输出到文件中,便于后续的分析和调试。此外,还可以根据具体需求进一步定制日志文件的命名规则,以更好地管理日志文件。


在Node.js中将运行日志写入文件是一个常见的需求。这里介绍一种更灵活的方法,通过使用winston库来实现按日期生成日志文件。

使用 winston 库记录日志

winston 是一个功能强大且灵活的日志库,支持多种传输方式,包括文件传输。以下是如何设置日志记录到文件,并按日期生成日志文件的步骤。

安装 winstonwinston-daily-rotate-file

首先,你需要安装 winstonwinston-daily-rotate-file

npm install winston winston-daily-rotate-file

示例代码

const { createLogger, transports, format } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

// 创建一个logger实例
const logger = createLogger({
    level: 'info', // 设置日志级别
    format: format.combine(
        format.timestamp({
            format: 'YYYY-MM-DD HH:mm:ss'
        }),
        format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
    ),
    transports: [
        new DailyRotateFile({
            filename: 'logs/app-%DATE%.log',
            datePattern: 'YYYY-MM-DD',
            zippedArchive: true,
            maxSize: '20m',
            maxFiles: '14d',
        })
    ]
});

// 日志记录示例
logger.info('这是一条普通信息');
logger.error('这是一条错误信息');

解释

  • level:设置日志级别(例如:info, error, warn)。
  • format:定义日志格式,包括时间戳和消息。
  • DailyRotateFile:创建一个每日轮转的日志文件传输器,可以设置文件名、日期模式等参数。

这样配置后,你的日志会自动按天生成文件,例如 logs/app-2023-10-01.log。你可以根据需要调整日志级别、日期格式和其他参数。

这种方法不仅提供了灵活性,还确保日志管理变得非常简单。

回到顶部