web-dev-qa-db-ja.com

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

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

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

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);
};

モーガンの使用方法

92
Green

あなたも私と同じものと混同しているようです。私がこの質問に出くわした理由です。 Javaでlog4j(Javaを知っている場合)で行うように、Loggerをインスタンス化し、「 'this'」と言うように、ロギングを手動ロギングに関連付けると思います。

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

この場合、まだ使用する必要があるため、使用できると考えた目的のために:

console.log(..);

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

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

私はあなたが望むものを正確に得ることができないかもしれないと思うが、Morganのロギングを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ロギングに与えたいロギングレベルを反映しています。

52
mflo999

モーガンは、あなたが説明している方法でログインするために使用すべきではありません。 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'}でmorganが呼び出される生産ラインに注意してください

そのオブジェクトのstreamプロパティは、ロガーが出力する場所を決定します。デフォルトでは、STDOUT(希望どおりのコンソール)ですが、リクエストデータのみを記録します。 console.log()が行うことは行いません。

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

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

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

26
Bill

私は以前同じ問題に直面していましたが、代わりにウィンストンを使用しました。前述のように、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

15
akrsmv
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の例

9
Carlos Ariza

Morgan:-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ファイルが自動的に作成されます。

8
Sunil Verma

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
Gautam Anand

私の場合:

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

修正:Visual Studioコードを使用しており、これを起動構成に追加する必要がありました

"outputCapture": "std"

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

0
Sagan