Morgan Logger를 사용하는 방법?
모건과 로그인 할 수 없습니다. 콘솔에 정보를 기록하지 않습니다. 설명서에는 사용 방법이 나와 있지 않습니다.
변수가 무엇인지보고 싶습니다. 이것은 response.js
expressjs 프레임 워크 파일의 코드입니다 .
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);
};
Morgan을 사용하는 방법?
당신도 저와 똑같은 것에 혼란스러워하는 것 같습니다.이 질문을 우연히 발견 한 이유입니다. Logger를 인스턴스화하고 log 'this'라고 말하는 log4j (Java를 아는 경우)와 Java에서 수행하는 것처럼 로깅을 수동 로깅과 연결한다고 생각합니다.
그런 다음 모건 코드를 파헤 쳤는데, 그 유형의 로거가 아니라 요청, 응답 및 관련 데이터의 자동 로깅을위한 것입니다. Express / Connect 앱에 미들웨어로 추가되면 기본적으로 원격 IP, 요청 방법, http 버전, 응답 상태, 사용자 에이전트 등의 세부 정보를 보여주는 stdout에 문을 기록해야합니다. 토큰을 사용하여 로그를 수정할 수 있습니다. 'dev'를 정의하거나 파일과 같은 출력 스트림에 로그 아웃하여 색상을 추가합니다.
이 경우에도 사용할 수 있다고 생각한 목적을 위해 다음을 사용해야합니다.
console.log(..);
또는 객체에 대한 출력을 예쁘게 만들고 싶다면 :
var util = require("util");
console.log(util.inspect(..));
원하는 것을 정확히 얻지 못할 수있는 방법이 있다고 생각하지만 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은 동일한 appender 등을 사용하여 원하는 것을 같은 위치에 쓸 것입니다. 물론, debug () 대신 스트림 래퍼에서 info () 또는 원하는 것을 호출 할 수 있습니다. -이는 Morgan의 req / res 로깅에 부여하려는 로깅 수준을 반영합니다.
모건은 당신이 설명하는 방식으로 로그인하는 데 사용되어서는 안됩니다. Morgan은 Apache 및 Nginx와 같은 서버가 error_log 또는 access_log에 기록하는 방식으로 로깅을 수행하도록 구축되었습니다. 참고로 모건을 사용하는 방법은 다음과 같습니다.
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을 계속 사용하려면 거기에 있습니다.
나는 전에 같은 문제에 직면했고 대신 윈스턴을 사용했습니다. 위에서 말했듯이 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은 애플리케이션에 액세스하는 클라이언트를 식별하는 데 도움이되는 미들웨어입니다. 기본적으로 로거입니다.
Morgan을 사용하려면 아래 단계를 따라야합니다.
- 아래 명령을 사용하여 Morgan을 설치하십시오.
npm install --save morgan
json.package 파일에 morgan이 추가됩니다.
- 프로젝트에 모건 포함
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 파일을 자동으로 생성합니다.
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!')
});
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": ""
}
}
나의 경우에는:
-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가 문제를 일으키지 않는지 확인하십시오.
참고 URL : https://stackoverflow.com/questions/23494956/how-to-use-morgan-logger
'program story' 카테고리의 다른 글
Visual Studio에서 Eclipse의 ALT + UP / DOWN (선 이동)에 해당하는 것은 무엇입니까? (0) | 2020.08.23 |
---|---|
URL 시작 부분의 문자열 제거 (0) | 2020.08.23 |
부분에서 Razor 섹션 채우기 (0) | 2020.08.22 |
상위 POM의 프로필에 대해 이미 정의 된 플러그인의 구성을 재정의 할 수 있습니까? (0) | 2020.08.22 |
Android 스튜디오 오류의 의미 : 주석이없는 매개 변수가 @NonNull 매개 변수를 재정의합니다. (0) | 2020.08.22 |