search
LoginSignup
2

More than 5 years have passed since last update.

posted at

updated at

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

モジュールを作る

/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");

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
What you can do with signing up
2