programing

모건 로거는 어떻게 사용하나요?

jooyons 2023. 7. 24. 22:27
반응형

모건 로거는 어떻게 사용하나요?

모건과 함께 기록할 수 없습니다.콘솔에 정보를 기록하지 않습니다.설명서에는 사용 방법이 나와 있지 않습니다.

변수가 무엇인지 알고 싶습니다.은 다의코다니드의 입니다.response.js frameworkjs 파일:

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

모건을 어떻게 사용합니까?

당신도 제가 이 질문을 우연히 발견한 이유인 저와 같은 것에 대해 혼란스러워하는 것 같습니다.Logger를 인스턴스화하고 log 'this'라고 말하는 log4j(java를 알고 있는 경우)를 사용하여 Java에서 수행하는 것처럼 로깅을 수동 로깅과 연결한다고 생각합니다.

그리고 모건 코드를 조사해보니 그런 유형의 로거가 아니라 요청, 응답 및 관련 데이터의 자동 기록을 위한 것이었습니다.기본적으로 express/connect 앱에 미들웨어로 추가되는 경우 원격 IP, 요청 방법, http 버전, 응답 상태, 사용자 에이전트 등의 세부 정보를 표시하는 stdout에 문을 기록해야 합니다.토큰을 사용하여 로그를 수정하거나 'dev'를 정의하거나 파일과 같은 출력 스트림에 로그아웃하여 색상을 추가할 수 있습니다.

이 경우와 마찬가지로 다음과 같이 사용할 수 있다고 생각했습니다.

console.log(..);

또는 객체에 맞게 출력을 예쁘게 하려면 다음을 수행합니다.

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

저는 여러분이 원하는 것을 정확히 얻을 수는 없지만, 모건의 기록과 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);

이제 앱로그에 원하는 것은 무엇이든 작성할 수 있으며, 모건은 동일한 부록 등을 사용하여 원하는 것을 동일한 장소에 작성할 것입니다.물론 debug() 대신 스트림 래퍼에서 info() 또는 원하는 대로 호출할 수 있습니다. 이는 Morgan의 req/res 로깅에 제공할 로깅 수준을 반영하는 것입니다.

모건은 당신이 설명하는 방식으로 로그인해서는 안 됩니다.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은 요청/응답의 자동 기록을 위한 것입니다.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

Morgan:- Morgan은 애플리케이션에 액세스하는 클라이언트를 식별하는 데 도움이 되는 미들웨어입니다.기본적으로 로거입니다.

모건을 사용하려면 다음 단계를 따라야 합니다.

  1. 다음 명령을 사용하여 모건을 설치합니다.

npm install --save morgan

morgan을 json.package 파일에 추가합니다.

  1. 프로젝트에 모건 포함

var morgan = require('morgan');

// 쓰기 스트림 생성(추가 모드)

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

참고: 맹목적으로 위를 향하지 않도록 주의하십시오. 필요한 모든 조건이 갖추어져 있는지 확인하십시오.

위에서 사용자가 앱에 액세스하면 루트에 대한 access.log 파일이 자동으로 생성됩니다.

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

내 경우:

-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가 문제의 원인이 아닌지 확인하십시오.

문서에 따라 미리 정의된 방법을 사용하여 요청 데이터를 기록할 수 있습니다.

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

사후 요청 데이터를 기록하고 싶다고 가정하면 사용자 지정 토큰을 만들어 다음과 같이 사용할 수 있습니다.

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

그러면 콘솔에 다음과 같이 POST 요청이 기록됩니다.

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

참고 - 요청 데이터는 현지 개인 정보 보호법(예: EU의 GDPR) 또는 비즈니스 표준을 위반할 수 있으므로 기록해서는 안 됩니다.이것은 단지 예시일 뿐입니다.

모건을 이용하는 것은 꽤 간단합니다.설명서에서 알 수 있듯이 모건으로 원하는 결과물을 얻을 수 있는 방법은 여러 가지가 있습니다.미리 구성된 로깅 방법과 함께 제공되거나 사용자가 직접 로깅 방법을 정의할 수 있습니다.예.

const morgan = required morgan('')

app.use(사용하다')

그러면 tiny라는 사전 구성이 제공됩니다.단말기에서 어떤 기능을 하는지 알게 될 것입니다.만약 당신이 이것에 만족하지 않고 더 깊은 것을 원한다면, 예를 들어 요청 URL을 말하면, 여기서 토큰이 들어옵니다.

morgan.syslogurl', 함수(req, res){ 반환 '/api/myendpoint' }

그런 다음 다음과 같이 사용합니다.

app.use(으:url ')

설명서에 모두 강조 표시되어 있는지 확인합니다.

이렇게 하면 됩니다.

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

효과가 있을 겁니다

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

}

언급URL : https://stackoverflow.com/questions/23494956/how-to-use-morgan-logger

반응형