মরগান লগার কীভাবে ব্যবহার করবেন?


109

আমি মরগানের সাথে লগ করতে পারি না। এটি কনসোল করার জন্য লগ ইন তথ্য। ডকুমেন্টেশন এটি কীভাবে ব্যবহার করতে পারে তা বলে না।

আমি দেখতে চাই একটি পরিবর্তনশীল কী। এটি 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);
};

মরগান কীভাবে ব্যবহার করবেন?

উত্তর:


111

দেখে মনে হচ্ছে আপনিও আমার মত একই বিষয় নিয়ে বিভ্রান্ত হয়ে পড়েছেন, কারণ এই প্রশ্নটিতে আমি হোঁচট খেয়েছি। আমি মনে করি আমরা লগইনটিকে ম্যানুয়াল লগিংয়ের সাথে সংযুক্ত করি যেমন জাভাতে লগ 4 জে (যদি আপনি জাভা জানেন) যেখানে আমরা কোনও লগার ইনস্ট্যান্ট করি এবং লগ 'এটি' বলি।

তারপরে আমি মরগান কোডটি খনন করেছি, দেখা যাচ্ছে যে এটি কোনও লগারের মতো নয়, এটি অনুরোধ, প্রতিক্রিয়া এবং সম্পর্কিত ডেটা স্বয়ংক্রিয়ভাবে লগিংয়ের জন্য। যখন কোনও এক্সপ্রেস / সংযুক্ত অ্যাপ্লিকেশনটিতে মিডলওয়্যার হিসাবে যুক্ত করা হয়, তখন ডিফল্টরূপে স্টেটআউটে বিবৃতিগুলি লগ করা উচিত: দূরবর্তী আইপি, অনুরোধের পদ্ধতি, HTTP সংস্করণ, প্রতিক্রিয়া স্থিতি, ব্যবহারকারী এজেন্ট ইত্যাদি It তাদের জন্য 'ডিভ' সংজ্ঞায়িত করে বা কোনও ফাইলের মতো আউটপুট স্ট্রিমে লগ আউট করে রঙ যুক্ত করুন।

যে উদ্দেশ্যে আমরা ভেবেছিলাম আমরা এটি ব্যবহার করতে পারি, যেমন এই ক্ষেত্রে, আমাদের এখনও ব্যবহার করতে হবে:

console.log(..);

অথবা আপনি যদি সামগ্রীর জন্য আউটপুটটিকে সুন্দর করতে চান:

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

60

আমি মনে করি আমার এমন একটি উপায় রয়েছে যেখানে আপনি যা চান ঠিক তেমনটি পেতে পারেন না তবে আপনি মরগানের লগিং লগ 4 জেসের সাথে সংহত করতে পারেন - অন্য কথায়, আপনার সমস্ত লগিং ক্রিয়াকলাপ একই জায়গায় যেতে পারে। আমি আশা করি এক্সপ্রেস সার্ভারের এই ডাইজেস্টটি কম বেশি স্ব-ব্যাখ্যামূলক:

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

আপনি এখন অ্যাপলগ-এ যা যা চান লিখতে পারেন এবং একই অ্যাপেন্ডার ইত্যাদি ব্যবহার করে মরগান একই জায়গায় যা চায় তা লিখতে পারে অবশ্যই, আপনি তথ্য () বা ডিবাগের পরিবর্তে স্ট্রিম রেপারে যা পছন্দ করতে পারেন কল করতে পারেন) - এটি কেবল মরগানের রেকর্ড / রেজো লগিংয়ে আপনি যে লগিং স্তরটি দিতে চান তা প্রতিফলিত করে।


38

আপনি যেভাবে বর্ণনা করছেন তাতে লগিন করতে মরগান ব্যবহার করা উচিত নয়। মরগান সেইভাবে লগিং করতে তৈরি হয়েছিল যাতে অ্যাপাচি এবং এনগিনেক্সের মতো সার্ভারগুলি ত্রুটি_লগ বা অ্যাক্সেস_লগে লগ করে। রেফারেন্সের জন্য, আপনি এইভাবে মরগান ব্যবহার করেন:

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যে বস্তুর সম্পত্তি নির্ধারণ করে যেখানে এটির আউটপুট। ডিফল্টরূপে এটি বন্ধ হয়ে যায় (আপনার কনসোল, ঠিক যেমন আপনি চান) তবে এটি কেবল অনুরোধের ডেটা লগ করবে। এটি কি করবে console.log()না।

আপনি যদি উড়তে জিনিসগুলি পরীক্ষা করতে চান তবে বিল্ট ইন ইন utilলাইব্রেরিটি ব্যবহার করুন :

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

সুতরাং আপনার প্রশ্নের উত্তর হ'ল আপনি ভুল প্রশ্ন জিজ্ঞাসা করছেন। আপনি যদি এখনও লগিন অনুরোধের জন্য মরগান ব্যবহার করতে চান তবে আপনি সেখানে যান।


এই জাতীয় লগিংয়ের জন্য আপনি কী প্রস্তাব দিচ্ছেন?
নোয়া

ডিবাগ প্যাকেজ হ'ল আপনি যা চাইবেন। আসল প্রাথমিক ধারণাটি হ'ল ব্যবহার করার পরিবর্তে console.log()আপনি আপনার কোডের যে কোনও জায়গায় ডিবাগ লিব ব্যবহার করতে পারেন এবং এটির উত্পাদনে অপসারণ করার জন্য আপনার চিন্তা করার দরকার নেই। github.com/visionmedia/debug
wgp

1
আমি এটি পাই না ... যদি আমার নোডজেএস অ্যাপে ত্রুটি ঘটে তবে আমি কি মরগান ব্যবহার করে কোনও ত্রুটি লগফাইলে রেকর্ড করব না ? নাকি উইনস্টন, নাকি বুনিয়ান? যদি না হয় তবে আমি এর জন্য কী ব্যবহার করব?
র‌্যান্ডি এল

2
ওপি সূচিত করেছিল যে তিনি মরগানকে ডেটা পরিদর্শন করতে এবং তার অ্যাপ্লিকেশনটি ডেবগ করতে ডেবাগ করতে চান যা সত্যই ডিবাগ মডিউলের মতো কিছু করা উচিত। উত্পাদনের কোনও ফাইলটিতে আপনার একেবারে ত্রুটিগুলি লগ করা উচিত। যদি আপনি আমার অ্যাপ্লিকেশনটি উপরে আমার উত্তরের পরামর্শ অনুসারে সেট আপ করেন তবে ত্রুটিগুলি উত্পাদনের কোনও ফাইল এবং বিকাশে কনসোলে লগ হয়। এটা কি পরিষ্কার জিনিস আপ?
wgp

17

আমি আগেও একই সমস্যার মুখোমুখি হয়েছিলাম এবং পরিবর্তে আমি উইনস্টন ব্যবহার করেছি। উপরের ফেলাস যেমন বলেছিলেন, মরগান হ'ল অনুরোধ / প্রতিক্রিয়াটির স্বয়ংক্রিয় লগিংয়ের জন্য। উইনস্টন লগ 4 নেট / লগ 4 জের মতো একইভাবে কনফিগার করা যেতে পারে, এর তীব্রতা স্তর, বিভিন্ন স্ট্রিম রয়েছে যেখানে আপনি লগ করতে পারেন ইত্যাদি has

উদাহরণ স্বরূপ:

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

দ্রষ্টব্য: উপরের কোডটি কল করার আগে উইনস্টন.লগারগুলি খালি, অর্থাৎ আপনার কোনও লগার এখনও কনফিগার করা নেই। অনেকটা লগ 4 নেট / জে এক্সএমএল কনফিগার পদ্ধতিগুলির মতো - আপনার লগিংয়ের জন্য আপনাকে প্রথমে তাদের কল করতে হবে।

তারপরে, আপনার অ্যাপ্লিকেশন সার্ভারের পাশের কোডটি যেখানেই আপনি করতে পারেন:

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


আমার অবশ্যই বলতে হবে, জাভা প্রকারের ভাষাগুলি থেকে MEAN স্ট্যাকে বিকাশকারীদের জন্য, এটি তাদের আরামদায়ক এবং পরিচিত করে তুলবে। ধন্যবাদ
জয়েশ

আমার অ্যাপ্লিকেশন স্থাপন করা হলে আমি কীভাবে এই লগ ফাইলটি অ্যাক্সেস করতে পারি তা আমাকে বলতে পারেন, আসলে আমি ক্লাউড স্টোরেজে লগ ফাইলটি সংরক্ষণ করতে চাই তবে সঠিক উপায় খুঁজে পেতে সক্ষম হই না
অভয় শেহগাল

9

মরগান: - মরগান একটি মিডওয়্যার যা আমাদের অ্যাপ্লিকেশন অ্যাক্সেস করছে এমন ক্লায়েন্টদের সনাক্ত করতে আমাদের সহায়তা করবে। মূলত লগার

মরগান ব্যবহার করতে, আমাদের নীচের পদক্ষেপগুলি অনুসরণ করতে হবে: -

  1. নীচের কমান্ডটি ব্যবহার করে মরগান ইনস্টল করুন:

npm install --save 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}));

দ্রষ্টব্য: আপনি অন্ধভাবে চোখের জল ফেলে না তা নিশ্চিত করুন যেখানে আপনার প্রয়োজন সেখানে প্রতিটি শর্ত রয়েছে।

উপরে একবার ব্যবহারকারী আপনার অ্যাপ্লিকেশন অ্যাক্সেস করার পরে স্বয়ংক্রিয়ভাবে আপনার রুটে একটি অ্যাক্সেস.লগ ফাইল তৈরি করবে।


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

উদাহরণস্বরূপ নোডেজ + এক্সপ্রেস + মরগান


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 - -"

ফিক্স: আমি ভিজ্যুয়াল স্টুডিও কোডটি ব্যবহার করছিলাম এবং এটি আমার লঞ্চ কনফিগারেশনে যুক্ত করতে হয়েছিল

"outputCapture": "std"

পরামর্শ, আপনি যদি কোনও আইডিই থেকে চালাচ্ছেন তবে আইডিই সমস্যা সৃষ্টি করছে না তা নিশ্চিত করতে সরাসরি কমান্ড লাইন থেকে চালান।


console.log()স্ট্যান্ডার্ড আউটপুটও লিখছেন না ?
পুরাতন গিজার

0

আপনি মঙ্গো-মরগান-এক্স ব্যবহার করার চেষ্টা করতে পারেন

ব্যবহারটি হ'ল:

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

মুরগান ব্যবহার করা বেশ সোজা is হিসাবে ডকুমেন্টেশন প্রস্তাব দেওয়া, সেখানে মরগান সঙ্গে আপনার পছন্দসই আউটপুট পেতে বিভিন্ন উপায় আছে। এটি পূর্বনির্ধারিত লগিং পদ্ধতিগুলির সাথে আসে বা আপনি নিজের একটি নির্ধারণ করতে পারেন। যেমন।

কনস্ট মরগান = প্রয়োজনীয় ('মরগান')

app.use (মরগান ( 'ক্ষুদ্র')

এটি আপনাকে ক্ষুদ্র নামে পরিচিত প্রাক কনফিগারেশন দেবে। আপনার টার্মিনালে এটি কী করে তা আপনি লক্ষ্য করবেন। আপনি যদি এতে সন্তুষ্ট না হন এবং আপনি গভীরতর উদাহরণ চান তবে অনুরোধটি ইউআরএল বলতে দিন, তারপরে টোকেনগুলি এখানে।

morgan.token ('url', ফাংশন (req, res) {রিটার্ন '/ এপিআই / myendPoint'})

তারপরে এটির মতো ব্যবহার করুন:

app.use (মরগান (': url')

ডকুমেন্টেশন এটি সমস্ত হাইলাইট চেক করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.