2012-07-17 43 views
1

當使用以下代碼尾部文件時,我們可以成功輸出數據。如何在node.js中追蹤多個文件?

var spawn = require('child_process').spawn; 
var filename = '/logs/error.log'; 
var tail = spawn("tail", ["-f", filename]); 
tail.stdout.on("data", function (data) { 
    console.log(data); 
}); 

但是當我將文件名更改爲「/logs/*.log」時,我沒有找到任何輸出。誰能告訴我是什麼原因?謝謝!

回答

0

因爲tailspawn都不知道如何使用通配符擴展文件名到匹配文件名集合中。這通常是由shell執行的,所以在這種情況下,你需要在代碼中自己完成。

2

在控制檯上輸入tail -f /logs/*.log時,shell的擴展名爲/logs/*.log;在tail程序獲得參數時,它們已經擴展到tail -f /logs/error.log /logs/other.log。你需要自己做Node的擴展:

var fs = require('fs'); 
var spawn = require('child_process').spawn; 
var filename = fs.readdirSync('/logs').map(function(file) { return '/logs/' + file }); 
var tail = spawn("tail", ["-f"].concat(filename)); 
tail.stdout.on("data", function (data) { 
    console.log(data); 
}); 
+0

謝謝你的回答!但是當運行你改變的代碼時,我仍然沒有找到任何輸出。所以我更改文件名'/logs/out.log /logs/error.log',並且我也沒有找到任何輸出。 – Steve 2012-07-17 03:16:23

+0

嘿,@Steve,對不起! 'spawn'的最後一個參數應該是單個數組;我已經修復了示例代碼。 – 2012-07-17 04:54:40

+1

或者你做了類似spawn(「bash」,[「-c」,「tail」,「-f」,filename)),在這種情況下你可以使用通配符:) – Doa 2012-07-17 12:48:08