iT邦幫忙

DAY 27
0

從無到有打造 RESTful API service系列 第 27

[API-d27] - 實戰開發 - Log 處理 及 Config (Db, Apikey)

小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/

好讀版 - http://blog.kerkerj.in/blog/2014/10/27/api-d27/

Github 參考

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 進來,然後就直接使用它就好了!

這樣就可以幫助我們將一些重要的設定從程式碼中抽離出來了!

今天就這樣啦!


上一篇
[API-d26] - 實戰開發 - API-key
下一篇
[API-d28] - 實戰開發 - 發佈 - Forever
系列文
從無到有打造 RESTful API service30

尚未有邦友留言

立即登入留言