Hoe Morgan-logger te gebruiken?

Ik kan niet inloggen met Morgan. Het registreert geen informatie naar de console. De documentatie vertelt niet hoe het te gebruiken.

Ik wil zien wat een variabele is. Dit is een code uit het bestand response.jsvan het expressjs-framework:

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

Hoe gebruikt u Morgan?


Antwoord 1, autoriteit 100%

Het lijkt erop dat jij ook verward bent met hetzelfde als ik, de reden waarom ik op deze vraag stuitte. Ik denk dat we loggen associëren met handmatig loggen zoals we dat in Java zouden doen met log4j (als je java kent) waar we een Logger instantiëren en log ‘this’ zeggen.

Toen heb ik Morgan-code ingegraven, het bleek niet dat type logger te zijn, het is voor het automatisch loggen van verzoeken, antwoorden en gerelateerde gegevens. Als het als middleware aan een express/connect-app wordt toegevoegd, moet het standaard instructies naar stdout loggen met details over: remote ip, request-methode, http-versie, responsstatus, user-agent enz. Hiermee kunt u het log wijzigen met tokens of voeg er kleur aan toe door ‘dev’ te definiëren of zelfs uit te loggen bij een uitvoerstroom, zoals een bestand.

Voor het doel waarvan we dachten dat we het konden gebruiken, zoals in dit geval, moeten we nog steeds het volgende gebruiken:

console.log(..);

Of als je de uitvoer mooi wilt maken voor objecten:

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

Antwoord 2, autoriteit 54%

Ik denk dat ik een manier heb waarop je misschien niet precies krijgt wat je wilt, maar je kunt Morgan’s logboekregistratie integreren met log4js — met andere woorden, al je logboekactiviteiten kunnen naar dezelfde plaats gaan. Ik hoop dat deze samenvatting van een Express-server min of meer voor zich spreekt:

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

Nu kun je naar de AppLog schrijven wat je wilt en Morgan zal op dezelfde plaats schrijven wat het wil, met dezelfde appenders, enz. Natuurlijk kun je info() of wat je maar wilt in de stream-wrapper aanroepen in plaats van debug() — dat geeft alleen het logniveau weer dat u aan Morgan’s req/res-logging wilt geven.


Antwoord 3, autoriteit 34%

Morgan mag niet worden gebruikt om in te loggen op de manier die u beschrijft. Morgan is gebouwd om te loggen op de manier waarop servers zoals Apache en Nginx loggen in de error_log of access_log. Ter referentie, dit is hoe je Morgan gebruikt:

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

Let op de productielijn waar Morgan wordt aangeroepen met een options hash {skip: ..., stream: __dirname + '/../morgan.log'}

De eigenschap streamvan dat object bepaalt waar de logger uitvoert. Standaard is dit STDOUT (uw console, precies zoals u dat wilt) maar het zal alleen verzoekgegevens loggen. Het gaat niet doen wat console.log()doet.

Als je dingen meteen wilt inspecteren, gebruik dan de ingebouwde utilbibliotheek:

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

Dus het antwoord op je vraag is dat je de verkeerde vraag stelt. Maar als je Morgan nog steeds wilt gebruiken voor het loggen van verzoeken, ga dan maar.


Antwoord 4, autoriteit 16%

Ik had hetzelfde probleem geleden en in plaats daarvan gebruikte ik Winston. Zoals de heren hierboven al zeiden, is Morgan bedoeld voor het automatisch loggen van verzoeken/antwoorden. Winston kan vrijwel op dezelfde manier worden geconfigureerd als log4Net/log4J, heeft ernstniveaus, verschillende streams waarop u kunt inloggen, enz.

Bijvoorbeeld:

npm install winston

Als u vervolgens de onderstaande code ergens op uw applicatie-initialisatie aanroept:

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

opmerking: voordat u bovenstaande code aanroept, is winston.loggers leeg, d.w.z. u heeft nog geen loggers geconfigureerd. Vrijwel zoals Log4Net/J XmlConfigure-methoden – u moet ze eerst aanroepen om uw logboekregistratie te starten.

Vervolgens, waar dan ook in uw zijcode van de applicatieserver, kunt u het volgende doen:

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

Hopelijk helpt dat.

voor meer documentatiereferentie: https://www.npmjs.com/package/winston


Antwoord 5, autoriteit 8%

Morgan:-
Morgan is een middleware die ons zal helpen om de klanten te identificeren die toegang hebben tot onze applicatie. Eigenlijk een logger.

Om Morgan te gebruiken, moeten we onderstaande stappen volgen:-

  1. Installeer de morgan met het onderstaande commando:

npm install --save morgan

Hiermee wordt Morgan aan het json.package-bestand toegevoegd

  1. Neem de morgan op in je project

var morgan = require('morgan');

3> // maak een schrijfstroom (in append-modus)

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

Opmerking:
Zorg ervoor dat je niet blindelings naar boven schiet zorg ervoor dat je alle
voorwaarden waar je nodig hebt.

Hierboven wordt automatisch een access.log-bestand voor uw root gemaakt zodra de gebruiker toegang heeft tot uw app.


Antwoord 6, autoriteit 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!')
});

voorbeeld nodejs + express + morgan


Antwoord 7, autoriteit 3%

In mijn geval:

-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: ik gebruikte Visual Studio-code en ik moest dit toevoegen aan mijn Launch Config

"outputCapture": "std"

Suggestie, als u vanuit een IDE werkt, voer het dan rechtstreeks uit vanaf de opdrachtregel om er zeker van te zijn dat de IDE het probleem niet veroorzaakt.


Antwoord 8, autoriteit 2%

Volgens de documenten kunt u een vooraf gedefinieerdemethode om verzoekgegevens te loggen

app.use(morgan('tiny'));

Stel dat je gegevens van een postverzoek wilt loggen, dan kun je een aangepaste tokenen gebruik het als volgt

morgan.token('postData', (request) => {
  if (request.method == 'POST') return ' ' + JSON.stringify(request.body);
  else return ' ';
});
app.use(
  morgan(
    ':method :url :status :res[content-length] - :response-time ms :postData'
  )
);

Hiermee wordt een POST-verzoek in de console geregistreerd als

POST /api/test2 409 33 - 0.253 ms  {"name":"Test name","number":"323-322-55"}

Opmerking– Log nooit verzoekgegevens in, omdat dit de lokale privacywetgeving (bijv. AVG in de EU) of de zakelijke norm kan schenden. Dit is slechts een voorbeeld


Antwoord 9

Morgan gebruiken is vrij eenvoudig. Zoals de documentatiesuggereert, zijn er verschillende manieren om krijg je gewenste output met Morgan. Het wordt geleverd met vooraf geconfigureerde logmethoden of u kunt er zelf een definiëren. Bijv.

const morgan = vereisen(‘morgan’)

app.use(morgan(‘tiny’)

Dit geeft je de preconfiguratie genaamd tiny. U merkt in uw terminal wat het doet.
Indien u hier niet tevreden mee bent en u wilt dieper b.v. laten we zeggen de verzoek-URL, dan komen tokens binnen.

morgan.token(‘url’, functie (req, res){
retourneer ‘/api/mijneindpunt’
})

gebruik het dan als volgt:

app.use(morgan(‘ :url ‘)

Controleer de documentatie, daar is alles gemarkeerd.


Antwoord 10

Doe dit gewoon:

app.use(morgan('tiny'));

en het zal werken.


Antwoord 11

Misschien wil je proberen mongo-morgan-ext

Het gebruik is:

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

De verwachte output is

{
    "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": ""
    }
}

Other episodes