技術ネタ: 2013年1月アーカイブ

log4jsを使ってロギングしてみました。

参考にしたサイトは以下。
http://d.hatena.ne.jp/muddydixon/20111204
https://github.com/nomiddlename/log4js-node

まずapp.jsやserver.js以外からも同じロガーを参照する事を考え、ロガーを以下のようにライブラリ化します。

$ vi ../lib/logger.js

var log4js = require('log4js');
log4js.configure('./log4js.json', { reloadSec: 300 });
var logger = log4js.getLogger('default');
module.exports = logger;
module.exports.log4js = log4js;

ロガーの設定はルートディレクトリにlog4js.jsonという形で以下のようにしてみました。

$ vi ./log4js.json
{
  "appenders": [
    {
      "type": "dateFile",
      "filename": "logs/access.log",
      "pattern": "-yyyy-MM-dd",
      "maxLogSize": 20480,
      "backups": 3,
      "category": "default"
    },
    {
      "type": "console",
      "category": "default"
    }
  ],
  "levels": {
    "default": "INFO"
  }
}

ポイントはlevelsの部分で、対象カテゴリ(自分で定義する種類のロガー)とそれのレベルを設定するところなどでしょうか。

あとはapp.jsやその他jsから呼びます。expressと合わせるとこんな感じでしょうか。

var logger = require('./lib/logger');
    app.configure(function(){
      app.use(logger.log4js.connectLogger(logger, { level: logger.log4js.levels.INFO, nolog: ["\\.css", "\\.js", "\\.jpg", "\\.jpeg", "\\.gif"] }));
//      app.use(express.logger('dev')); // switch logger to log4js
.......
    });

細かいところは省略してます。
app.useで書いてますが、app.configureで環境に合わせて書いた方が良いでしょう。
あと、nolog設定で不要なアクセスログを切っていますが、express自体のロガーが機能していると、コンソールにそのログは出続けてしまうので、expressのロガーはコメントアウトして切ってしまっています。

こんな感じすかね。

ではでは。

再度挑戦

前回はmaillogはうまくいかずとりあえずapacheだけ設定して終りましたが、引き続き調べたところmaillogもいけそうでした。

参考にしたのはこちら

loggerをsyslogからrsyslogに切り替えて、以下のようにtimestampのフォーマットを変更すればokでした。

# Use default timestamp format
-$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
+$ActionFileDefaultTemplate RSYSLOG_FileFormat

$ sudo /etc/init.d/syslog stop
$ sudo /etc/init.d/rsyslog start
$ sudo chkconfig syslog off
$ sudo chkconfig rsyslog on

無事maillogがmongoに保存されました。
めでたしめでたし。
 

ちなみに

td-agent.confは以下。
<source>
  type tail
  path /var/log/maillog
  tag maillog
  format /^(?<date>[^ ]+) (?<host>[^ ]+) (?<process>[^:]+): (?<message>((?<key>[^ :]+)[ :])? ?((to|from)=<(?<address>[^>]+)>)?.*)$/
#  format syslog
  pos_file /var/log/td-agent/mail.pos
</source>

<match maillog>
  type forward
  flush_interval 10s
  <server>
    host 192.168.1.1
    port 24224
  </server>
</match>
fluentd.conf側はこんな感じ。
<source>
  type forward
  port 24224
</source>
<match maillog>
  type copy
  <store>
    type stdout
  </store>
  <store>
    type mongo
    database mail
    collection log
    host localhost
    port 27017
    flush_interval 10s
  </store>
</match>

どうも。

ハシモトです。

掲題の通り、fluentdで遊んでみようかと思います。
対象のログは自前運用のapacheログとmaillogです。

1