ログ出力
アプリケーションを稼働させる時にログを出力することは、デバッグや問題解決のために非常に重要です。本番運用が始まると24時間張り付いて状態を見守ることは難しいため、問題発生時など過去の状態を調べたい時にログが貴重な手がかりとなります。
Node.js用に様々なログ出力モジュールが公開されていますが、ここではwinston(MITライセンス)というライブラリを紹介します。
winstonのインストール
winstonをインストールするには、プロジェクトのディレクトリで次のコマンドを実行します。
$ npm install winston
winstonの使い方
winstonの使い方をリスト1に示します。デフォルトではコンソールにのみ出力されるため、リスト1ではファイルにも出力されるように設定しています。
winston = require 'winston' # ファイルにもログを出力 winston.add winston.transports.File, filename : 'app.log' # 出力先となるファイル timestamp: true # タイムスタンプを出力する # コンソールの出力形式を変更する winston.remove winston.transports.Console winston.add winston.transports.Console, timestamp: true # タイムスタンプを出力する colorize : true # 色を付ける level : 'silly' # sillyレベル以上のログをすべて出力(デフォルトはinfo) # sillyレベルのメッセージを出力 winston.silly "This is silly" # verboseレベルのメッセージを出力 winston.verbose "This is verbose" # infoレベルのメッセージを出力 winston.info "This is info" # warnレベルのメッセージを出力 winston.warn "This is warn" # debugレベルのメッセージを出力 winston.debug "This is debug" # errorレベルのメッセージを出力 winston.error "This is error"
このリストを実行すると図1のように表示されます。
出力オプション
winston.add()
の第2引数には出力先に応じて以下のようなオプションを指定できます。()内の大文字はデフォルト値を表します。
出力先がコンソールの場合のオプション
- level(文字列):このレベル以上のログを出力する。デフォルトはinfo。
- silent(true/FALSE):trueを指定すると何も出力しない。
- colorize(true/FALSE):色付きで出力するか。
- timestamp(true/FALSE):メッセージと一緒に時刻を出力するか。
出力先がファイルの場合のオプション
- level(文字列):このレベル以上のログを出力する。デフォルトはinfo。
- silent(true/FALSE):trueを指定すると何も出力しない。
- timestamp(true/FALSE):メッセージと一緒に時刻を出力するか。
- filename(文字列):出力先のファイル名。
- maxsize(バイト数):ログファイルの最大サイズ。このサイズを超えると新しいファイルが作られる。
- maxFiles(ファイル数):ログファイルの最大サイズを超えた場合に何個までファイルが作られるか。
- json(TRUE/false):JSON形式で出力するか。
レベル一覧
ログ出力時に、そのログがどの程度の重要性を持つかの目安としてレベルを付けます。前述の出力オプションでlevel
を指定すると、そのレベル以上の重要度を持つメッセージだけを出力することができます。
デフォルトでは表2に示すレベルが使えます。一番上のsillyは最も重要度が低く、一番下のerrorは最も重要度が高いメッセージに使います。
レベル | おおよその意味 |
silly | その他 |
verbose | 詳細な情報 |
info | 情報 |
warn | 警告 |
debug | デバッグ用出力 |
error | エラー |