2011-08-26 22 views
4

假設我的node.js應用程序正在運行。如果出現錯誤(我的意思是所有錯誤,不僅僅是網絡錯誤,如果發生錯誤,它會計數),我怎樣才能調用一個函數來發送郵件給我?如何針對Node.js中發生的每個錯誤發送電子郵件?

基本上,在我希望它寫入err.out之前,我想要一封郵件發送給我。

我使用node.js和express。

編輯:我知道如何發送電子郵件。我想知道的問題是如何攔截錯誤。 你知道如何發生錯誤時,它會記錄到out.log?那麼,現在,我是tail -f out.log,監視錯誤。我不能整天坐在家裏做這件事。我想要通過電子郵件發送給我的錯誤,只要它彈出out.log。

我想通過電子郵件發送給我所有錯誤。 (不只是表達錯誤)。如果它已記錄,我想通過電子郵件發送該錯誤。

回答

11

你可以替換節點全球console.error()函數的一個實現的發送電子郵件:

console.error = function(msg) { 
    // send email 
    // ... 

    // additionaly log 
    process.stderr.write(msg); 
}; 

然後每次通話在每個圖書館作出co nsole.error()會調用您的具體實現發送郵件;)

+0

我把這個放在哪裏?在我的app.js? (我使用的是Node.js Express) – TIMEX

+0

甚至其他的東西(貓鼬,redis)都會通過這個嗎? (如果我把它放在app.js中) – TIMEX

+2

你可以放在任何地方(但儘可能早的是最好的),並且是的每次調用console.error()都會調用你的特殊的console.error()功能。 –

1

查找的NodeJS smtp clients/servers

emailjs例如

var email = require("./path/to/emailjs/email"); 
var server = email.server.connect({ 
    user:  "username", 
    password:"password", 
    host:  "smtp.gmail.com", 
    ssl:  true 
}); 

// send the message and get a callback with an error or details of the message that was sent 
server.send({ 
    text: "i hope this works", 
    from: "you <[email protected]>", 
    to: "someone <[email protected]m>, another <[email protected]>", 
    cc: "else <[email protected]>", 
    subject: "testing emailjs" 
}, function(err, message) { console.log(err || message); }); 
+0

我知道如何發送電子郵件。但我想知道如何攔截它。 – TIMEX

0

由於所有日誌條目都存儲在有限數量的日誌文件中,而不是試圖攔截所有可能的錯誤事件,爲什麼不只是設置一個文件更改監視器並將新行郵寄給您?通過這種方式,您還可以安排最後一小時/天/ ...的彙總日誌條目的間隔,與打開單獨的郵件相比,這將更容易完成。