<세팅목록>
1. 디렉토리/파일목록 세팅
2. Git 세팅
3. 라이브러리 세팅
4. node서버와 react 연결, 프록시 개발환경 설정
5. 디렉토리에 따른 코드스플리팅과 라우터설계
6. DB세팅
7. 로그세팅 // 여기
8. 에러핸들러 미들웨어 세팅
9. 쿠키파서/서드파티 미들웨어 세팅
...
1. 로그세팅
- 메인 로직 이외에 도움을 주는 미들웨어 중 request 로그를 저장하는 시스템을 구축해보자.
/middleware/logger.js
const { format } = require('date-fns');
const { v4 : uuid } = require('uuid');
const fs = require('fs');
const fsPromises = require('fs').promises;
const path = require('path');
const logEvents = async (message, logFileName)=>{
const dateTime = `${format(new Date(), 'yyyyMMdd\tHH:mm:ss')}`
const logItem = `${dateTime}\t${uuid()}\t${message}\n`
try {
if(!fs.existsSync(path.join(__dirname, '..', 'logs'))){ //logs 폴더가 존재하지 않으면
await fsPromises.mkdir(path.join(__dirname, '..', 'logs'))
}
await fsPromises.appendFile(path.join(__dirname, '..', 'logs', logFileName), logItem);
}
catch(err){
console.log(err)
}
}
const logger = (req, res, next)=>{
logEvents(`${req.method}\t${req.url}\t${req.headers.origin}`, 'reqLog.log');
console.log(`${req.method} ${req.path}`);
next();
}
module.exports = {logEvents, logger}
- 사실 별거 없다. logEvents 모듈은 logs폴더가 없으면 logFileName인자를 받아서 새로 만들고, 그 안에 로그 내용을 적는거다.
- next()는 미들웨어 끝났으니 다음걸로 넘기세요~ 의미이다.
- 모듈을 exports 해주고
/backend/app.js
//...
const { logger } = require('./middleware/logger');
// body-parser setting (4.16버전 이상 express에 내장되었다.)
app.use(express.json());
app.use(express.urlencoded({extended: false}));
//...
app.use(logger);
app.use(express.static(path.join(__dirname, 'public'))) // static path 미들웨어
//...
- 위에서 require 해주고
- app.use(logger); 로 사용하면 된다.
- 위치가 중요하다 어떤 미들웨어가 먼저 튀어나갈지 순서대로 결정되니까.
- 그리고 전 파트에서 body-parser로 파싱했던 json 미들웨어는 express 4.16 이상 버전부터 express에 내장되었다고 한다. 그래서 바꿔봤다.
- 저장하고 4000포트로 접속해주면
그리고 나서
내부를 살펴보면
- 다음은 에러를 핸들링 해보자~
'더이상 하지 않는 망한 프로젝트 > 프로젝트 개발 과정' 카테고리의 다른 글
[앱삼] 4. (frontend) Redux-toolkit 구조 세팅 (0) | 2023.03.02 |
---|---|
[앱삼] 3. DB연결 구조 개선하기 (0) | 2023.02.27 |
[앱삼] 2. MERN 풀스택 환경 기본세팅 - 4 (0) | 2023.02.26 |
[앱삼] 2. MERN 풀스택 환경 기본세팅 - 2 (1) | 2023.02.26 |
[앱삼] 2. MERN 풀스택 환경 기본 세팅 - 1 (0) | 2023.02.26 |
댓글