๐Ÿ“„ Morgan ๋ชจ๋“ˆ

์ž„์ฐฝํ˜„ยท2022๋…„ 12์›” 13์ผ
0

Node.js

๋ชฉ๋ก ๋ณด๊ธฐ
5/6
post-thumbnail

๐Ÿ“„ morgan ๋ชจ๋“ˆ์ด๋ž€?

  • node.js๋ฅผ ์œ„ํ•œ ์š”์ฒญ๋“ค์— ๋Œ€ํ•œ ๋กœ๊ฑฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด
  • 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 ๋“ฑ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

โš™๏ธ margan ์˜ต์…˜๋“ค

morgan(format, options)
  • morgan ๋กœ๊ฑฐ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ format, options์„ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค
  • format์€ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ด๋ฆ„์˜ ๋ฌธ์ž์—ด, ํ˜•์‹ ๋ฌธ์ž์—ด, ๋˜๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

[ format ]

1. combined

  • ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ
  • ๋ถˆํŠน์ • ๋‹ค์ˆ˜๊ฐ€ ์ ‘์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— IP๋ฅผ ๋กœ๊ทธ์— ๋‚จ๊ฒจ์คŒ

2. common
3. dev

  • ๊ฐœ๋ฐœ์šฉ์„ ์œ„ํ•ด response์— ๋”ฐ๋ผ ์ƒ‰์ƒ์ด ์ž…ํ˜€์ง„ ์ถ•์•ฝ๋œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅ.
  • :status๊ฐ’์ด ๋นจ๊ฐ„์ƒ‰์ด๋ฉด ์„œ๋ฒ„ ์—๋Ÿฌ์ฝ”๋“œ, ๋…ธ๋ž€์ƒ‰์ด๋ฉด ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ ์ฝ”๋“œ, ์ฒญ๋ก์ƒ‰์€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ฝ”๋“œ, ๊ทธ์™ธ ์ฝ”๋“œ๋Š” ์ปฌ๋Ÿฌ๊ฐ€ ์—†๋‹ค.

4. short
๊ธฐ๋ณธ ์„ค์ •๋ณด๋‹ค ์งง์€ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์‘๋‹ต ์‹œ๊ฐ„์„ ํฌํ•จ.

[ Options ]

1. immediate

  • response๋Œ€์‹  request์— ๋”ฐ๋ผ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์„œ๋ฒ„ ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ๋„ request๋“ค์€ ๊ธฐ๋ก๋˜์ง€๋งŒ, reponse(response code, ์ปจํ…์ธ  ๊ธธ์ด ๋“ฑ๋“ฑ)์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋กํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ๋‹ค.

2. 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!!');
});
profile
Hi there ๐Ÿ‘‹ i'm backend developer

0๊ฐœ์˜ ๋Œ“๊ธ€