モーガンロガーの使用方法


109

モーガンでログインできません。コンソールに情報を記録しません。ドキュメントはそれを使用する方法を教えていません。

変数とは何かを知りたい。これは、response.jsexpressjsフレームワークのファイルからのコードです。

var logger = require("morgan");

res.render = function(view, options, fn){
  options = options || {};
  var self = this;
  var req = this.req;
  var app = req.app;

  // support callback function as second arg
  if ('function' == typeof options) {
    fn = options, options = {};
  }

  // merge res.locals
  options._locals = self.locals;

  // default callback to respond
  fn = fn || function(err, str){
    if (err) return req.next(err);
    self.send(str);
  };

  // Here I want to see what fn is
  // But it doesn't show me anything in console
  // How to use it?
  logger(fn);

  // render
  app.render(view, options, fn);
};

モーガンの使い方は?

回答:


111

あなたも私と同じことで混乱しているようです。その理由は、この質問に出くわしたからです。ロガーをインスタンス化し、「これ」と言うlog4j(Javaを知っている場合)を使用してJavaで行うように、ロギングを手動ロギングに関連付けます。

それから私はモーガンコードを掘りましたが、それはそのタイプのロガーではなく、要求、応答、および関連データの自動ロギング用であることがわかりました。Express / Connectアプリにミドルウェアとして追加されると、デフォルトで、リモートIP、リクエストメソッド、httpバージョン、レスポンスステータス、ユーザーエージェントなどの詳細を示すステートメントをstdoutに記録します。トークンを使用してログを変更したり、 'dev'を定義するか、ファイルなどの出力ストリームにログアウトすることで、色を追加します。

私たちがそれを使用できると思った目的のために、この場合はまだ使用する必要があります:

console.log(..);

または、オブジェクトの出力をきれいにしたい場合:

var util = require("util");
console.log(util.inspect(..));

60

私はあなたがあなたが望むものを正確に得ることができないかもしれない方法があると思います、しかしあなたはlog4jsとモルガンのロギングを統合することができます-言い換えれば、あなたのすべてのロギング活動は同じ場所に行くことができます。私はExpressサーバーからのこのダイジェストが多かれ少なかれ自明であることを望みます:

var express = require("express");
var log4js = require("log4js");
var morgan = require("morgan");
...
var theAppLog = log4js.getLogger();
var theHTTPLog = morgan({
  "format": "default",
  "stream": {
    write: function(str) { theAppLog.debug(str); }
  }
});
....
var theServer = express();
theServer.use(theHTTPLog);

これで、AppLogに必要なものを書き込むことができ、Morganは同じ場所に同じアペンダーなどを使用して、必要なものを書き込みます。もちろん、debug()の代わりにinfo()またはストリームラッパーで好きなものを呼び出すことができます。 -これは、Morganのreq / resロギングに指定するロギングレベルを反映しています。


38

Morganは、あなたが説明している方法でログインするために使用すべきではありません。Morganは、ApacheやNginxなどのサーバーがerror_logまたはaccess_logにログを記録する方法でログを記録するように構築されています。参考までに、これはmorganの使用方法です。

var express     = require('express'),
    app         = express(),
    morgan      = require('morgan'); // Require morgan before use

// You can set morgan to log differently depending on your environment
if (app.get('env') == 'production') {
  app.use(morgan('common', { skip: function(req, res) { return res.statusCode < 400 }, stream: __dirname + '/../morgan.log' }));
} else {
  app.use(morgan('dev'));
}

オプションハッシュで呼び出されたモーガンが表示される生産ラインに注意してください {skip: ..., stream: __dirname + '/../morgan.log'}

streamそのオブジェクトのプロパティは、ロガーが出力する場所を決定します。デフォルトではSTDOUT(ご希望のコンソール)ですが、ログに記録されるのはリクエストデータのみです。それは何をするつもりはありませんconsole.log()

その場で物事を検査したい場合は、組み込みのutilライブラリを使用します。

var util = require('util');
console.log(util.inspect(anyObject)); // Will give you more details than console.log

したがって、あなたの質問に対する答えは、あなたが間違った質問をしているということです。しかし、リクエストのロギングに引き続きMorganを使用したい場合は、そのままです。


この種のロギングには何をお勧めしますか?
ノア

Debugパッケージはあなたが望むかもしれないものです。本当の基本的な考え方はconsole.log()、コードを使用するどこでもDebug libを使用でき、本番環境でそれを削除することを心配する必要がないということです。github.com/visionmedia/debug
wgp

1
私はエラーが私のNodeJSアプリで発生した場合...それを得る、私はしていないではないモルガンを使用してログファイルにそのエラーを記録するために?またはウィンストン、またはバニヤン?そうでない場合は、何を使用しますか?
ランディL

2
OPは、Morganを使用してデータを検査し、開発中のアプリをデバッグしたいことを示唆しています。これは、実際にはDebugモジュールのようなもので行う必要があります。本番環境では、絶対にエラーをファイルに記録する必要があります。上記の回答で提案したとおりにアプリを設定すると、本番環境のファイルと開発中のコンソールにエラーが記録されます。これで問題は解決しましたか?
wgp 2015

17

以前に同じ問題に直面し、代わりにウィンストンを使用しました。上で述べたように、morganは要求/応答の自動ロギング用です。Winstonは、log4Net / log4Jとほぼ同じように構成でき、重大度レベル、ログを記録できるさまざまなストリームなどがあります。

例えば:

npm install winston

次に、アプリケーションの初期化のどこかで以下のコードを呼び出すと、

var winston = require('winston');

// setup default logger (no category)
winston.loggers.add('default', {
    console: {
        colorize: 'true',
        handleExceptions: true,
        json: false,
        level: 'silly',
        label: 'default',
    },
    file: {
        filename: 'some/path/where/the/log/file/reside/default.log',
        level: 'silly',
        json: false,
        handleExceptions: true,
    },
});

//
// setup logger for category `usersessions`
// you can define as many looggers as you like
//
winston.loggers.add('usersessions', {
    console: {
        level: 'silly',
        colorize: 'true',
        label: 'usersessions',
        json: false,
        handleExceptions: true,
    },
    file: {
        filename: 'some/path/where/the/log/file/reside/usersessions.log',
        level: 'silly',
        json: false,
        handleExceptions: true,
    },
});

注:上記のコードを呼び出す前は、winston.loggersは空です。つまり、まだロガーを構成していません。Log4Net / J XmlConfigureメソッドによく似ています。ロギングを初期化するには、まずそれらを呼び出す必要があります。

次に、アプリケーションサーバー側のコードのどこにいても、次の操作を実行できます。

var winston = require('winston');
// log instances as defined in first snippet
var defaultLog = winston.loggers.get('default'); 
var userSessionsLog = winston.loggers.get('usersessions');

defaultLog.info('this goes to file default.log');
userSessionsLog.debug('this goes to file usersessions.log')

お役に立てば幸いです。

詳細なドキュメント参照:https : //www.npmjs.com/package/winston


Javaタイプ言語からMEANスタックに切り替える開発者にとって、これは快適で親しみやすいものになるでしょう。ありがとう
Jayesh

アプリの展開時にこのログファイルにアクセスする方法を教えてください。実際にはログファイルをクラウドストレージに保存したいのですが、適切な方法が見つかりません
Abhay Sehgal

9

Morgan:-Morganは、アプリケーションにアクセスしているクライアントを特定するのに役立つミドルウェアです。基本的にロガー。

モーガンを使用するには、以下の手順に従う必要があります:-

  1. 以下のコマンドを使用してモルガンをインストールします。

npm install --save morgan

これにより、morganがjson.packageファイルに追加されます

  1. プロジェクトにモーガンを含める

var morgan = require('morgan');

3> //書き込みストリームを作成します(追加モード)

var accessLogStream = fs.createWriteStream(
      path.join(__dirname, 'access.log'), {flags: 'a'}
 );
// setup the logger 
app.use(morgan('combined', {stream: accessLogStream}));

注:むやみに上手に配管しないでください。必要なすべての条件があることを確認してください。

上記では、ユーザーがアプリにアクセスすると、ルートにaccess.logファイルが自動的に作成されます。


6
var express = require('express');

var fs = require('fs');

var morgan = require('morgan')

var app = express();

// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(__dirname + '/access.log',{flags: 'a'});


// setup the logger
app.use(morgan('combined', {stream: accessLogStream}))


app.get('/', function (req, res) {
  res.send('hello, world!')
});

nodejs + express + morganの例


4

私の場合:

-console.log()  // works
-console.error() // works
-app.use(logger('dev')) // Morgan is NOT logging requests that look like "GET /myURL 304 9.072 ms - -"

FIX:Visual Studioコードを使用していて、これをLaunch Configに追加する必要がありました

"outputCapture": "std"

IDEから実行している場合は、コマンドラインから直接実行して、IDEが問題の原因となっていないことを確認してください。


console.log()標準出力にも書きませんか?
Old Geezer

0

mongo-morgan-extを使用してみてください

使用法は次のとおりです。

var logger = require('mongo-morgan-ext');

var db = 'mongodb://localhost:27017/MyDB';

var collection = 'Logs'

var skipfunction = function(req, res) {

return res.statusCode > 399;
} //Thiw would skip if HTTP request response is less than 399 i.e no errors.

app.use(logger(db,collection,skipfunction)); //In your express-application

期待される出力は

{
    "RequestID": "",
    "status": "",
    "method": "",
    "Remote-user": "",
    "Remote-address": "",
    "URL": "",
    "HTTPversion": "",
    "Response-time": "",
    "date":"",
    "Referrer": "",
    "REQUEST": { //10
        "Accept": "",
        "Accept-Charset": "",
        "Accept-Encoding": "",
        "Accept-Language": "",
        "Authorization": "",
        "Cache-Control": "",
        "Connection": "",
        "Cookie": "",
        "Content-Length": "",
        "Content-MD5": "",
        "Content-Type": "",
        "Expect": "",
        "Forwarded": "",
        "From": "",
        "Host": "",
        "Max-Forwards": "",
        "Origin": "",
        "Pragma": "",
        "Proxy-Authorization": "",
        "Range": "",
        "TE": "",
        "User-Agent": "",
        "Via": "",
        "Warning": "",
        "Upgrade": "",
        "Referer": "",
        "Date": "",
        "X-requested-with": "",
        "X-Csrf-Token": "",
        "X-UIDH": "",
        "Proxy-Connection": "",
        "X-Wap-Profile": "",
        "X-ATT-DeviceId": "",
        "X-Http-Method-Override":"",
        "Front-End-Https": "",
        "X-Forwarded-Proto": "",
        "X-Forwarded-Host": "",
        "X-Forwarded-For": "",
        "DNT": "",
        "Accept-Datetime": "",
        "If-Match": "",
        "If-Modified-Since": "",
        "If-None-Match": "",
        "If-Range": "",
        "If-Unmodified-Since": ""
    },
    "RESPONSE": {
        "Status": "",
        "Content-MD5":"",
        "X-Frame-Options": "",
        "Accept-Ranges": "",
        "Age": "",
        "Allow": "",
        "Cache-Control": "",
        "Connection": "",
        "Content-Disposition": "",
        "Content-Encoding": "",
        "Content-Language": "",
        "Content-Length": "",
        "Content-Location": "",
        "Content-Range": "",
        "Content-Type":"",
        "Date":"",
        "Last-Modified": "",
        "Link": "",
        "Location": "",
        "P3P": "",
        "Pragma": "",
        "Proxy-Authenticate": "",
        "Public-Key-Pins": "",
        "Retry-After": "",
        "Server": "",
        "Trailer": "",
        "Transfer-Encoding": "",
        "TSV": "",
        "Upgrade": "",
        "Vary": "",
        "Via": "",
        "Warning": "",
        "WWW-Authenticate": "",
        "Expires": "",
        "Set-Cookie": "",
        "Strict-Transport-Security": "",
        "Refresh":"",
        "Access-Control-Allow-Origin": "",
        "X-XSS-Protection": "",
        "X-WebKit-CSP":"",
        "X-Content-Security-Policy": "",
        "Content-Security-Policy": "",
        "X-Content-Type-Options": "",
        "X-Powered-By": "",
        "X-UA-Compatible": "",
        "X-Content-Duration": "",
        "Upgrade-Insecure-Requests": "",
        "X-Request-ID": "",
        "ETag": "",
        "Accept-Patch": ""
    }

}

0

モーガンの使用は、かなり簡単です。ドキュメントが示唆しているように、morganを使用して目的の出力を取得する方法はいくつかあります。事前に構成されたロギングメソッドが付属していますが、自分で定義することもできます。例えば。

const morgan = require( 'morgan')

app.use(morgan( 'tiny')

これにより、tinyと呼ばれる事前設定が行われます。あなたはそれが何をするかをあなたのターミナルで気づくでしょう。これに満足しておらず、さらに深くしたい場合、たとえばリクエストURLを言ってみれば、ここがトークンの出番です。

morgan.token( 'url'、function(req、res){return '/ api / myendpoint'})

次に、次のように使用します。

app.use(morgan( ':url')

強調表示されているすべてのドキュメントを確認してください。

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