728x90
반응형
: 요청과 응답에 대한 정보를 콘솔에 기록
저번에 썼던 wiston과 덧붙여서 작성한다.
morganMiddleware.js
const morgan = require("morgan");
const Logger = require('../config/logger');
const stream = {
write: message => { Logger.http(message) }
};
const skip = () => {
const env = process.env.NODE_ENV || "development";
return env !== "development";
};
morgan.token("status", function (req, res) {
let color ;
if (res.statusCode < 300) color = "\\x1B[32m" //green
else if (res.statusCode < 400) color = "\\x1B[36m" //cyan
else if (res.statusCode < 500) color = "\\x1B[33m" //yellow
else if (res.statusCode < 600) color = "\\x1B[31m" //red
else color = "\\033[0m" /*글자색 초기화*/
return color + res.statusCode + "\\033[35m" /*보라색*/;
});
// <https://jeonghwan-kim.github.io/morgan-helper/>
morgan.token("request", function (req, res) {
return "Request_" + JSON.stringify(req.body);
});
const morganMiddleware = morgan(
":makeLine 요청_:method | url_':url' | :request | Status_:status | 응답시간_:response-time ms (:res[content-length]줄)",
{ stream, skip }
);
module.exports = morganMiddleware;
저번에 만들었던 wiston는 config파일에 logger.js로 만들어줬다면, morgan은 morganMiddleware.js로 같은 config파일에 넣어 만들어준다.
- 일반적으로 로그를 관리하기 위해서는 wiston과 morgan을 같이 사용한다. 그래서 둘 다 사용하기 위해서 두개 다 임포트해주었다.
- const stream은 콘솔로그를 대신하여 내가 만든 커스텀 로그를 사용한다. morgan라이브러리에 보면 스트림에 대한 모든 버퍼를 지우고 버퍼링된 모든 데이터가 기본 장치에 기록되도록 한다.
- skip은 저번 winston에 정리할 때와 같다. 어떤 환경에서 사용할건지 말해준다.
- morgan 함수에서 사용할 변수를 생성해주는 mogan.token() 함수이다. 첫번째 인자에는 사용할 토큰명, 두번째 인자에는 받아올 인자를 넣어준다. 그리고 if문 사용하여 res.statuscode가 200~500대까지 설정해준다. 여기서 res.statuscode는 res.status(300)등을 의미한다. 그리고 color를 변수로 지정해줘서 필요할때마다 빼내어 올 수 있게 지정해주어도 된다.
- Request로 받아오는 값 확인할 수 있게 토큰을 생성하였다.
- 마지막으로 커스터마이징한 format과 option을 넣어준다.
const morgan = require('morgan');
app.use(morgan('dev'));
server에 이렇게 저장해주면 된다.
morgan(format, options)
morgan 로거 미들웨어 함수는 주어진 format, options을 이용하여 생성한다. format은 미리 정의된 이름의 문자열, 형식 문자열, 또는 로그 항목을 생성하는 함수가 될 수 있다.
morgan format
- combined : 배포환경에서 사용하고, 불특정 다수가 접속하기 때문에 IP를 로그에 남겨준다.
- dev : 개발용을 위해 response에 따라 색상이 입혀진 축약된 로그를 출력한다. :status값이 빨간색이면 서버 에러코드, 노란색이면 클라이언트 에러 코드, 청록색은 리다이렉션 코드, 그외 코드는 컬러가 없다.
- common
- default : 기본 값으로, 아무 것도 안 넣으면 자동으로 실행된다.
- short ; 기본 설정보다 짧은 로그를 출력하고, 응답 시간을 포함한다.
- tiny : 최소화된 로그를 출력한다.
보통 배포시에는 combined 혹은 common에 필요한 정보들을 추가하여 사용하는 것을 추천하고, 개발 환경에서는 dev를 추천한다.
server.js
global.logger || (global.logger = require('./config/logger')); // → 전역에서 사용
const morganMiddleware = require('./config/morganMiddleware');
app.use(morganMiddleware); // 콘솔창에 통신결과 나오게 해주는 것
- 맨 위에 있는 winston의 log찍어주는 함수를 전역에서 사용하기 위하여 써준다.
- morganMiddleware의 사용을 위해 임포트해주고 이를 server에서 사용해주기 위하여 app.use를 해준다. 스트림에 대한 모든 버퍼를 지우고 버퍼링된 모든 데이터가 기본 장치에 기록되도록 한다.
아래의 사이트를 참고하여 작성하였습니다.
https://inpa.tistory.com/entry/EXPRESS-📚-morgan-미들웨어
https://docs.microsoft.com/en-us/dotnet/api/system.io.bufferedstream.flush?view=net-6.0
728x90
반응형