...
morgan 모듈
morgan에 연결 후 포트에 접속하면 기존 로그 외에 추가적인 로그를 볼 수 있다.
위 코드를 실행하여 3000번 포트에 들어간 후 콘솔을 보면 아래와 같은 로그가 찍혀있는 것을 볼 수 있다.
마지막 로그는 morgan 미들웨어에서 나오는 것이다.
이처럼 morgan은 요청과 응답에 대한 정보를 콘솔에 기록한다.
const express = require('express');
const path = require('path');
const morgan = require('morgan'); // 미들웨어 연결
const app = express();
app.set('port', process.env.PORT || 3000);
// 로그 기록
if (process.env.NODE_ENV === 'production') {
app.use(morgan('combined')); // 배포환경이면
} else {
app.use(morgan('dev')); // 개발환경이면
}
app.get('/', (req, res) => {
res.send('Hello, index');
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기 중');
});
위 코드에서는 인수로 dev를 넣었는데 이 외에 combined, common, short, tiny 등을 넣을 수 있다.
- 개발 환경에서는 dev를, 배포 환경에서는 combined를 이용하면 좋다.
// combined를 하면 로그가 더 자세해진다.
app.use(morgan('combined'));
::1 - - [02/Nov/2021:01:36:21 +0000] "GET /about HTTP/1.1" 404 144 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36"
margan 옵션들
morgan(format, options)
- morgan 로거 미들웨어 함수는 주어진 format, options을 이용하여 생성한다.
- format은 미리 정의된 이름의 문자열(아래 참조), 형식 문자열, 또는 로그 항목을 생성하는 함수가 될 수 있다.
[format]
combined
- 배포환경에서 사용
- 불특정 다수가 접속하기 때문에 IP를 로그에 남겨줌
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"
common
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]
dev
- 개발용을 위해 response에 따라 색상이 입혀진 축약된 로그를 출력.
- :status값이 빨간색이면 서버 에러코드, 노란색이면 클라이언트 에러 코드, 청록색은 리다이렉션 코드, 그외 코드는 컬러가 없다.
:method :url :status :response-time ms - :res[content-length]
short
- 기본 설정보다 짧은 로그를 출력하고, 응답 시간을 포함.
:remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms
tiny
- 최소화된 로그를 출력
:method :url :status :res[content-length] - :response-time ms
[Options]
immediate
- response대신 request에 따라 로그를 작성한다.
- 서버 크래시가 발생하여도 request들은 기록되지만, reponse(response code, 컨텐츠 길이 등등)의 데이터는 기록할 수 없기 때문에 사용한다.
skip
- 로깅의 스킵여부를 결정하기 위한 함수이다.
- 기본값은 false. 이 함수는 "skip(req, res)" 형식으로 호출된다.
morgan('combined', {
// 코드가 400 미만라면 함수를 리턴해 버려서 로그 기록 안함.
// 코드가 400 이상이면 로그 기록함
skip : function(req, res) { return res.statusCode < 400 }
});
var http = require('http');
var express = require('express');
var morgan = require('morgan');
var app = express();
var router = express.Router();
// 이곳으로 접근하면 로그를 출력
router.get('/logging', function(req, res) {
console.log('access logging');
res.writeHead(404, { 'Content-Type' : 'text/html' });
res.end('error!!');
});
// 이곳으로 접근하면 로그 출력하지 않음
router.get('/skip', function(req, res) {
console.log('access skip');
res.writeHead(200, { 'Content-Type' : 'text/html' });
res.end('success!!');
});
// Create new Morgan
var myMorgan = morgan('combined', {
skip : function(req, res) { return res.statusCode < 400 }
});
app.use(myMorgan);
app.use('/', router);
// 서버 생성 및 리슨
http.createServer(app).listen(10000, function() {
console.log('Server Start!!');
});
위의 코드를 작성하고 서버를 띄운 후 http://localhost:10000/logging 과 http://localhost:10000/skip에 접근하여 보자.
stream
- 로그 작성을 위한 Output stream옵션. 기본값은 process.stdout.
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.