Linux 如何阻止supervisord从Node.js服务器的日志输出中剥离颜色?
我正在使用supervisord管理我的Node.js服务器(确保它在崩溃时重新启动,并发送崩溃警报电子邮件)。但是,我发现,如果我通过supervisord运行我的Linux 如何阻止supervisord从Node.js服务器的日志输出中剥离颜色?,linux,node.js,logging,supervisord,Linux,Node.js,Logging,Supervisord,我正在使用supervisord管理我的Node.js服务器(确保它在崩溃时重新启动,并发送崩溃警报电子邮件)。但是,我发现,如果我通过supervisord运行我的app.js进程,那么到我的server.log和到控制台的输出都会褪色。我正在使用来处理我的日志记录。我有以下几个输出示例: 运行supervisord后的server.log内容: 2015-08-12T20:41:29.203Z - silly: Connected to redis 2015-08-12T20:41:29.2
app.js
进程,那么到我的server.log
和到控制台的输出都会褪色。我正在使用来处理我的日志记录。我有以下几个输出示例:
运行supervisord
后的server.log
内容:
2015-08-12T20:41:29.203Z - silly: Connected to redis
2015-08-12T20:41:29.206Z - debug: Connected to redis
2015-08-12T20:41:29.206Z - verbose: Connected to redis
2015-08-12T20:41:29.207Z - info: Connected to redis
2015-08-12T20:41:29.207Z - warn: Connected to redis
2015-08-12T20:41:29.207Z - error: Connected to redis
运行shell($node app.js
)后,服务器.log的内容:
我还注意到,如果我使用supervisorctl
中的tail
来监视节点服务器,颜色也会从那里去除。从shell运行时,我可以在控制台中看到颜色输出
有人知道为什么会发生这种情况,以及我如何解决这个问题吗
编辑:自从有人询问我的Winston配置:
var winston = require( 'winston' ),
fs = require( 'fs' ),
logDir = 'logs', // Or read from a configuration
logger;
winston.setLevels( winston.config.npm.levels );
winston.addColors( winston.config.npm.colors );
if ( !fs.existsSync( logDir ) ) {
// Create the directory if it does not exist
fs.mkdirSync( logDir );
}
logger = new( winston.Logger )( {
transports: [
new winston.transports.Console( {
level: 'silly',
colorize: true
} ),
new winston.transports.File( {
level: 'silly',
json: false,
colorize: true,
filename: logDir + '/server.log',
maxsize: 1024 * 1024 * 25 // 25MB
} )
],
exceptionHandlers: [
new winston.transports.File( {
filename: 'log/exceptions.log'
} )
]
} );
module.exports = logger;
我在网上找到了这个问题的答案
引用它:
只需在任何命令之前插入unbuffer
,使其认为是
写入交互式输出,即使它实际上是通过管道传输到
另一个可执行文件。这将在ls
的情况下保留颜色
比如说
unbuffer ls-l--color=auto | tee output.log
如果您还没有安装,在Ubuntu和其他Debian ish Linux发行版上,您可以通过执行以下操作来安装unbuffer
sudo-apt-get-install-expect-dev
你的应用程序可能检测到它们未连接到终端,因此正在禁用颜色输出。你可以使用Winston强制使用颜色。也许你应该发布你的Winston配置代码。我正在用Winston强制颜色输出。对于文件
和控制台
传输,我启用了所有级别的日志记录,并将着色
设置为true。我在上面添加了我的配置。这两个输出的示例都与该配置有关,一个是通过supervisord管理流程,另一个是通过shell使用节点
命令运行app.js文件。
var winston = require( 'winston' ),
fs = require( 'fs' ),
logDir = 'logs', // Or read from a configuration
logger;
winston.setLevels( winston.config.npm.levels );
winston.addColors( winston.config.npm.colors );
if ( !fs.existsSync( logDir ) ) {
// Create the directory if it does not exist
fs.mkdirSync( logDir );
}
logger = new( winston.Logger )( {
transports: [
new winston.transports.Console( {
level: 'silly',
colorize: true
} ),
new winston.transports.File( {
level: 'silly',
json: false,
colorize: true,
filename: logDir + '/server.log',
maxsize: 1024 * 1024 * 25 // 25MB
} )
],
exceptionHandlers: [
new winston.transports.File( {
filename: 'log/exceptions.log'
} )
]
} );
module.exports = logger;