問題
Hubot のログやロガー (Robot#logger
) についての情報が少ない。
公式 (v2.11.2) のドキュメントには、かろうじて利用例が掲載されているだけで、その他の情報はざっと検索した限りでは存在を確認できない。
唯一のドキュメント: https://github.com/github/hubot/blob/v2.11.2/docs/scripting.md#error-handling
# src/scripts/does-not-compute.coffee
module.exports = (robot) ->
robot.error (err, msg) ->
robot.logger.error "DOES NOT COMPUTE"
if msg?
msg.reply "DOES NOT COMPUTE"
解決策
ソースコードを読み、以下にまとめる。
結論: npm パッケージの log
npm パッケージの log を使っている。その README およびソースコードを読めば良い。
Hubot 2.11.2 での log のバージョンは 1.4.0
Hubot v2.11.2 では log 1.4.0 を使っている。
robot.coffee
Log = require 'log'
robot.coffee
@logger = new Log process.env.HUBOT_LOG_LEVEL or 'info'
package.json
"dependencies": {
"coffee-script": "1.6.3",
"optparse": "1.0.4",
"scoped-http-client": "0.10.0",
"log": "1.4.0",
"express": "3.18.1",
"readline-history": "~1.2.0"
},
ログレベル指定は環境変数 HUBOT_LOG_LEVEL
環境変数 HUBOT_LOG_LEVEL でログレベル (Log
のコンストラクタへの引数) を指定できる。デフォルトでは 'info' が使われる。
robot.coffee
@logger = new Log process.env.HUBOT_LOG_LEVEL or 'info'
ログレベルの一覧
指定できるログレベルの一覧は log
の README を参照。 syslog に従った値である。
Mirror that of syslog:
0 EMERGENCY system is unusable 1 ALERT action must be taken immediately 2 CRITICAL the system is in critical condition 3 ERROR error condition 4 WARNING warning condition 5 NOTICE a normal but significant condition 6 INFO a purely informational message 7 DEBUG messages to debug an application
ログレベル指定の大文字小文字の区別
ログレベルの指定時に大文字小文字の区別はない。
log.js
var Log = exports = module.exports = function Log(level, stream){
if ('string' == typeof level) level = exports[level.toUpperCase()];
log.js
exports.EMERGENCY = 0;
ログ出力メソッドの一覧
上記、ログレベルに対応するメソッドと log
とが用意されている。
Log#log
Log#emergency
Log#alert
Log#critical
Log#error
Log#warning
Log#notice
Log#info
Log#debug
なので、Hubot からは以下のメソッドを使える。
Robot#logger#log
Robot#logger#emergency
Robot#logger#alert
Robot#logger#critical
Robot#logger#error
Robot#logger#warning
Robot#logger#notice
Robot#logger#info
Robot#logger#debug