node.js winston logger no colors with nohup

node.js winston logger no colors with nohup

我们在项目中使用 winston logger,传输设置如下:

file: {
            filename: __base + '/log/server.log',
            colorize : true,
            timestamp : true,
            json : false,
            prettyPrint : true
        }

如果应用程序以 nohup 启动,则日志文件不会着色。它只在没有 nohup 的情况下工作。

nohup supervisor -w . -i node_modules/ server.js &

是winston还是nohup的问题?

colors package (used by winston) that performs the following check在判断是否支持颜色时造成的:

if (process.stdout && !process.stdout.isTTY) {
    return false;
}

这意味着当您的应用程序在后台 运行 时,它没有终端并且不使用颜色。这也会影响除 nohup 之外的 commands/apps(参见 issue #121)。

一个简单的解决方法是使用 --color=true 参数启动您的应用程序(或者在调用 require('winston') 之前使用 process.argv.push('--color=true') 模拟它。

或者,您可以修补 winston - 只需向 lib/winston/config.js 添加一行:

var colors = require('colors/safe');
colors.enabled = true; // add this line

但是,即使没有终端,所有这些解决方法很可能会使控制台记录器使用颜色。