Node.jsロギング


177

Node.Jsアプリケーションでのロギングの処理に役立つライブラリはありますか?私がやりたいのは、すべてのログをファイルに書き込みたいだけでなく、特定のサイズまたは日付の後にファイルをロールアウトするなどのオプションが必要なことです。


メンテナンスを容易にするために、すべての構成の詳細を1つのファイルに保持し、他のアプリケーションファイルのメソッドのみを使用しようとするlog4js imを組み込んでいます。しかし、期待どおりに動作しません。これが私がやろうとしていることです

var log4js = require('log4js'); 
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');


var traceLogger = function (message) {
        logger.trace('message');
    };

var errorLogger = function (message) {
        logger.trace(message);
    };


exports.trace = traceLogger;
exports.error = errorLogger;

このファイルを他のファイルに含めて試しました

log.error ("Hello Error Message");

しかし、それは機能していません。これに何か問題はありますか?


1
log4jsは問題ないようです。エラーレベルを間違って設定した。logger.setLevel(log4js.levels.ERROR);
Boklucius 14

回答:


196

Winstonはかなり優れたロギングライブラリです。それを使用して、ログをファイルに書き込むことができます。

コードは次のようになります。

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/debug.log', json: false })
  ],
  exceptionHandlers: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

その後、次のように使用できます。

var logger = require('./log');

logger.info('log to file');

5
@TravisWebb-github.com/ flatiron / winston / issues / 294github.com / flatiron / winston / issues / 280
ostergaard

3
私は長い間ウィンストンを使用してきました。バギーになってしまったので、私はnpmlogを優先して捨てました。
Airportyh 2013年

8
@everyone、ウィンストンは再び維持されているようだ... github.com/flatiron/winston/network
Daithí

簡単なメモ:上記の例では、色付きのコマンドライン出力のlogger.cli()を呼び出します。
ダンカン

1
Winstonでは、その構成を定義して.jsonファイルから読み取ることはできません。貧弱なデザイン、イモ。
miniml、2015年

59

Scribe.JS軽量ロガー

私は多くのロガーを調べましたが、軽量のソリューションを見つけることができませんでした。そのため、githubに投稿されるシンプルなソリューションを作成することにしました。

  • ユーザー、日付、レベルごとに整理されたファイルを保存します
  • きれいな出力を提供します(私たちは皆それが大好きです)
  • 使いやすいHTMLインターフェース

これがお役に立てば幸いです。

オンラインデモ

http://bluejamesbond.github.io/Scribe.js/

ログへの安全なWebアクセス

あ

きれいなテキストをコンソールにも出力します!

あ

ウェブアクセス

あ

Github

https://github.com/bluejamesbond/Scribe.js


5
このライブラリは、もはや維持されていますgithub.com/bluejamesbond/...
サイモンMeusel

30

Log4jsは、nodejsアプリケーションで最も人気のあるロギングライブラリの1つです。

それは多くのクールな機能をサポートしています:

  1. 色付きコンソールのログ
  2. ノードのconsole.log関数の置き換え(オプション)
  3. ファイルアペンダー、ファイルサイズに基づくログのローリング
  4. SMTP、GELF、hook.io、Logglyアペンダー
  5. マルチプロセスアペンダー(ワーカープロセスがある場合に便利)
  6. 接続/高速サーバー用のロガー
  7. 構成可能なログメッセージのレイアウト/パターン
  8. さまざまなログカテゴリのさまざまなログレベル(アプリログの一部をDEBUGとして作成し、その他の部分はエラーのみなど)

例:

  1. インストール: npm install log4js

  2. 構成(./config/log4js.json):

    {"appenders": [
        {
            "type": "console",
            "layout": {
                "type": "pattern",
                "pattern": "%m"
            },
            "category": "app"
        },{
            "category": "test-file-appender",
            "type": "file",
            "filename": "log_file.log",
            "maxLogSize": 10240,
            "backups": 3,
            "layout": {
                "type": "pattern",
                "pattern": "%d{dd/MM hh:mm} %-5p %m"
            }
        }
    ],
    "replaceConsole": true }
  3. 使用法:

    var log4js = require( "log4js" );
    log4js.configure( "./config/log4js.json" );
    var logger = log4js.getLogger( "test-file-appender" );
    // log4js.getLogger("app") will return logger that prints log to the console
    logger.debug("Hello log4js");// store log in file


6

「logger.setLevel( 'ERROR');」問題が発生しています。理由はわかりませんが、「ALL」以外に設定しても何も出力されません。私は少しつついて、コードを変更しました。それは私にとってはうまくいきます。2つのファイルを作成しました。

logger.js

var log4js = require('log4js');
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');

var getLogger = function() {
   return logger;
};

exports.logger = getLogger();

logger.test.js

var logger = require('./logger.js')

var log = logger.logger;

log.error("ERROR message");
log.trace("TRACE message");

「node logger.test.js」を実行すると、test.logファイルに「ERROR message」しか表示されません。レベルを「TRACE」に変更すると、両方の行がtest.logに出力されます。


2
logging.apache.org/log4j/1.2/manual.htmlロガーにはレベルを割り当てることができます。可能なレベルのセット:TRACE、DEBUG、INFO、WARN、ERROR、FATALロギングリクエストは、そのレベルがロガーのレベル以上の場合に有効化されていると言います。それ以外の場合、要求は無効になっているといいます。
Shawn C. 14

3

ウィンストンはほとんどの開発者にとって強力な選択です。私は長い間ウィンストンを使用してきました。最近、私はアプリケーションロギングを次のレベルに引き上げるpapertrailでwinstonを使用しました。

ここに彼らのサイトからの素晴らしいスクリーンショットがあります。

ここに画像の説明を入力してください

その有用性

  • さまざまなシステムのログを1か所で管理できます。これは、2つのバックエンド通信があり、両方からのログを適切に表示できる場合に非常に役立ちます。

  • ログはライブです。本番サーバーのリアルタイムログを確認できます。

  • 強力な検索とフィルター

  • ログで特定のテキストが検出された場合に電子メールを送信するアラートを作成できます。

そして、あなたはもっとhttp://help.papertrailapp.com/kb/how-it-works/event-viewer/を見つけることができます

簡単な構成で使用してwinstonwinston-expressおよびwinston-papertrailノードモジュール。

import winston from 'winston';
import expressWinston from 'express-winston';
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
// create winston transport for Papertrail
var winstonPapertrail = new winston.transports.Papertrail({
  host: 'logsX.papertrailapp.com',
  port: XXXXX
});
app.use(expressWinston.logger({
  transports: [winstonPapertrail],
  meta: true, // optional: control whether you want to log the meta data about the request (default to true)
  msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
  expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true
  colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
  ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
}));

これが誰かがログを管理するのに役立つことを願っています!!


1
これは引き続き機能しますが、winstonをv3にアップグレードした後、「Papertrailは従来のwinstonトランスポートです。アップグレードを検討してください」という警告が表示されます。現在未解決のトランスポートへのアップグレードがあります。
ジムジムソン2018年

2

「nodejslogger」モジュールは、単純なロギングに使用できます。ロギングには3つのレベル(INFO、ERROR、DEBUG)があります。

var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})

D:デバッグ、I:情報、E:エラー

logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")

モジュールには、https//www.npmjs.com/package/nodejsloggerからアクセスできます


0

ことを確認しerrorLoggerがラッパですlogger.trace。しかし、ロガーのレベルはエラーであるため、logger.traceはそのメッセージをロガーアペンダーに記録しません。

修正は、errorLoggerの本体でlogger.tracelogger.errorに変更することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.