[API-d27] - 實戰開發 - log 處理 及 config (db, apikey)
log 處理
今天要來談談 log 的處理,
身為一台自走 (?) node.js API server
也應該要記錄一下 request 的 log 呀!
不然哪天出問題了都不知道是哪個 request 把 server 搞掛了!
因此我們就要加入 log 的 middleware
node.js 的 log 套件也蠻多的, 例如 winston
不過我們今天要用的是 log4js
會選擇他其實也只是因為之前寫 java
有用過 log4j
log4js
的設定感覺起來比較相似
所以就使用它了!
再來我們就安裝一下 log4js
吧
$ npm install log4js -save
並在 app.js
中 require 進去
var log4js = require('log4js');
接著在 app.js
的前面區段加入以下程式碼:
log4js.configure({
appenders: [
{ type: 'console' }, //控制台輸出
{
type: 'file', //文件輸出
filename: 'logs/access.log',
maxLogSize: 20000000, // 20 MB
backups: 10,
category: 'normal'
}
],
replaceConsole: true
});
var logger = log4js.getLogger('normal');
logger.setLevel('INFO');
app.use(log4js.connectLogger(logger, {level: 'auto', format:':method :url'}));
其實註解已經可以看出一些端倪了
使用 log4js
可以輸出 log 檔案,並且會按照設定的檔案大小來寫入
如果達到 20MB 就會換一個新的檔案寫入,原本的還保留著,不過最多只會保留 10 份
接著就設定 log level, 以及想要 log 的資訊
詳細資訊就可以再多查詢一下
此時我們將 server run 起來吧!
並且對 server 戳幾個 request, 就會發現 log 檔案被建立起來了!
(該程式碼加在 token 檢查前或檢查後是有差異的,加在 token 檢查後面,token error 的話則不會被記錄到 log 裡面)
打開 log 檔看看,就會發現有 log 被寫入囉!
config (db, apikey)
有些重要的設定檔其實我們並不希望寫在程式碼裡,這時候 config 的設定很有用
建立設定檔有很多種方式,比方說直接寫一個 json 檔案,或是 xml 檔案
今天我們就用最簡單的 js 檔案的方式來建立 config 檔
我們在 config 資料夾裡新增一個 config.js
我們以下面的程式碼當作例子:
module.exports = {
"base_url": "http://localhost:3000",
"test_token": "55665566",
"db": {
"production": "mongodb://192.168.33.10:27017/TODOs",
"development": "mongodb://192.168.33.10:27017/DEV_TODOs",
"test": "mongodb://192.168.33.10:27017/TEST_TODOs"
}
};
要怎麼使用裡面的內容呢?
假設我們要將 db 的連結改成用 config 的方式連結的話:
var config = require('./config/config');
// Set DB
mongoose.connect(config.db.development);
只要先將 config require 進來,然後就直接使用它就好了!
這樣就可以幫助我們將一些重要的設定從程式碼中抽離出來了!
今天就這樣啦!