2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sails.jsAdvent Calendar 2014

Day 8

sails.jsでどのController/Modelからも参照できるLogラッパーを作る

Last updated at Posted at 2014-12-08

モジュールを作る

/api/services/以下にmodule.exportsしたモジュールを置けばどのController/Modelからも参照できます。

追記
下記コメントより、lodashが有効になってるためUnderscoreは不要らしいです..まあサンプルとして眺めてください。

例えばフロントエンドで大活躍のUnderscore.js、これをバックエンドでも使いたいことがあります。

underscoreモジュールをインストールして...

$ npm install underscore --save 

これを普通に使うのはrequireしたら出来るんですが、UnderscoreのようなユーティリティーモジュールをController/Modelごとに個別で読み込むのは面倒。そんなときはapi/services以下にラップしたモジュールを置きましょう。

/api/services/_.js
module.exports = (function(){
  var _ = require('underscore');
  return {
    each: _.each,
    contains: _.contains
  };
})();

これでどの場所からでもrequire()せずに_.each()で呼び出せます。

ログモジュール

次はログモジュールを作ります。sails.js(node.js)でのログ出力はフロントと同じでconsole.log()ですが、サーバーサイドということを考えるとこれだと不十分。なのでログモジュールを作り、環境ごとに出力を変更したり、今後の拡張性を考えた作りにしておきましょう。

今私が使っているログモジュールは以下のような感じになっています。業務でSlackを使っているので、問題が発生した場合、観測したい事象が発生した場合はSlackにログを投げるようにしています。

まずはSlackモジュールをインストールして...

$ npm install slack-node --save 

以下のコードを/api/services/に配置します。Slackモジュールに設定する値はリファレンスを元に設定してください。Slack-tokenはSlackのadd service integrationから取得できます。

/api/services/Logger.js
module.exports = (function(){

  var slackNode = require('slack-node');
  var slack = new slackNode("slack-token", "team-name");

  var postSlack = function(text, callback) {
    if (!callback) callback = function(){};

    slack.webhook({
      channel: '#general',
      username: 'bot-bot',
      text: text
    }, function(err, response) {
      if (err) {
        callback(err, null);
        return;
      }

      callback(null, response);
    });
  };

  var info = function(msg) {
    if (process.env.NODE_ENV === "production") {
      postSlack(msg);
    }
    else {
      console.log(msg);
    }
  };

  var debug = function(msg) {
    if (process.env.NODE_ENV !== "production") {
      console.log(msg);
    }
  };

  var err = function(msg) {
    if (process.env.NODE_ENV === "production") {
      postSlack(msg);
    }
    else {
      console.log(msg);
    }
  };

  return {
    i: info,
    d: debug,
    e: err
  };
})();

これで完了。あとはログを出力したいタイミングで、以下のように呼び出す。Logger.i()ならローカル環境ならコンソールに、production環境ならSlackにログを投げてくれる。

Logger.i("hoge");
2
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?