Sup*_*ion 16 logging stdout node.js
我创造了:
var access = fs.createWriteStream('/var/log/node/api.access.log', { flags: 'w' });
Run Code Online (Sandbox Code Playgroud)
然后管道:
process.stdout.pipe(access);
Run Code Online (Sandbox Code Playgroud)
然后尝试:
console.log("test");
Run Code Online (Sandbox Code Playgroud)
并且/var/log/node/api.access.log中没有出现任何内容.但是这种方式有效:
process.stdout.pipe(access).write('test');
Run Code Online (Sandbox Code Playgroud)
有人可以解释我做错了什么吗?
小智 24
我通过以下方式解决了这个问题:
var access = fs.createWriteStream('/var/log/node/api.access.log');
process.stdout.write = process.stderr.write = access.write.bind(access);
Run Code Online (Sandbox Code Playgroud)
当然,如果你愿意,你也可以分开stdout和stderr.
我也强烈建议处理未捕获的异常:
process.on('uncaughtException', function(err) {
console.error((err && err.stack) ? err.stack : err);
});
Run Code Online (Sandbox Code Playgroud)
这将涵盖以下情况:
Checkout console.Console,父类正常console。
var myLogFileStream = fs.createWriteStream(pathToMyLogFile);
var myConsole = new console.Console(myLogFileStream, myLogFileStream);
Run Code Online (Sandbox Code Playgroud)
然后您可以使用myConsole.log、myConsole.error、myConsole.dir等并直接写入您的文件。
您还可以按如下方式进行猴子补丁 process.stdout.write:
var fn = process.stdout.write;
function write() {
fn.apply(process.stdout, arguments);
myLogFileStream.write.apply(myLogFileStream, arguments);
}
process.stdout.write = write;
Run Code Online (Sandbox Code Playgroud)
console._stdout根据记录stdout到文件的动机,还有其他覆盖选项。
| 归档时间: |
|
| 查看次数: |
23097 次 |
| 最近记录: |