Hubotのログをlog4jsでホームディレクトリ配下に出力してみる

log4jsを使うために、package.jsonに下記を追加する
`"log4js": "^0.6.37"`

ログを出力するための記述を行う。
Linuxなどで、ホームディレクトリを指定するため、`#{process.env.HOME}`を使用し、ホームディレクトリを取得する。
※Linuxなどで記載するときのように`~/logs`と記述していて、すこしハマった。。。

```nekobot.coffee
#ここから
  log4js = require('log4js')
  log4js.configure {
      "appenders": [
        {
          "category": "access",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_access.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        },
        {
          "category": "system",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_system.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        },
        {
          "category": "error",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_error.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        }
      ],
      "levels": {
        "access": "INFO",
        "system": "INFO",
        "error": "INFO"
      }
  }

  systemLogger = log4js.getLogger('system')
  accessLogger = log4js.getLogger('access')
  errorLogger = log4js.getLogger('error')
#ここまで
module.exports = (robot) ->
  robot.hear /(shiitake|([C椎]|[しシ]\s*([いイぃィー]))\s*([たタ]\s*[けケ]|茸)|Shiitake\s*mushrooms|เห็ดหอม)/i, (msg) ->
      room = msg.envelope.room
      if room == "Shell"
        text = msg.match[1]
        msg.send  "#{text}一人前追加でーす。はいよろこんでー"
```

続いて、実際に出力する際の記述を追加

```nekobot.coffee
  log4js = require('log4js')
  log4js.configure {
      "appenders": [
        {
          "category": "access",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_access.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        },
        {
          "category": "system",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_system.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        },
        {
          "category": "error",
          "type": "dateFile",
          "filename": "#{process.env.HOME}/logs/nekobot_error.log",
          "pattern": "-yyyy-MM-dd",
          "backups": 7
        }
      ],
      "levels": {
        "access": "INFO",
        "system": "INFO",
        "error": "INFO"
      }
  }

  systemLogger = log4js.getLogger('system')
  accessLogger = log4js.getLogger('access')
  errorLogger = log4js.getLogger('error')

  module.exports = (robot) ->
    robot.hear /(shiitake|([C椎]|[しシ]\s*([いイぃィー]))\s*([たタ]\s*[けケ]|茸)|Shiitake\s*mushrooms|เห็ดหอม)/i, (msg) ->
      accessLogger.info 'nekobot connected'
      room = msg.envelope.room
      accessLogger.info room
      if room == "Shell"
        text = msg.match[1]
        msg.send  "#{text}一人前追加でーす。はいよろこんでー"

```

実際に試してみる

```
$ bin/hubot
nekobot> [Sun Aug 28 2016 02:39:15 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
nekobot> 
```

Hubotを起動するとホームディレクトリ配下のlogsに下記3ファイルが作成される

```
$ pwd
/Users/kijitoraneko/logs
$
$ ls -ltr
total 0
-rw-r--r--  1 kijitoraneko  staff  0  8 28 02:39 nekobot_system.log
-rw-r--r--  1 kijitoraneko  staff  0  8 28 02:39 nekobot_error.log
-rw-r--r--  1 kijitoraneko  staff  0  8 28 02:39 nekobot_access.log
$
```

続けて

```
nekobot> しいたけ
nekobot> しいたけ一人前追加でーす。はいよろこんでー
```

と、ボットに反応させると

```
$ ls -ltr
total 8
-rw-r--r--  1 kijitoraneko  staff    0  8 28 02:39 nekobot_system.log
-rw-r--r--  1 kijitoraneko  staff    0  8 28 02:39 nekobot_error.log
-rw-r--r--  1 kijitoraneko  staff  108  8 28 02:41 nekobot_access.log
$ vim nekobot_access.log
[2016-08-28 02:41:35.589] [INFO] access - nekobot connected
[2016-08-28 02:41:35.590] [INFO] access - Shell
```

ちゃんと書き込まれているようだ。

なお、ログレベル等についてはコチラを参考にしました。
[log4jsの覚え書き - log4.jsを使ってみた -](http://qiita.com/_daisuke/items/865cf929a403cc9eec53)