일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- fetch
- PS
- 유니크제약조건
- shared lock
- 동적sql
- 스토어드 프로시저
- BOJ
- 이진탐색
- 연결리스트
- FetchType
- dfs
- execute
- 백트래킹
- querydsl
- 낙관적락
- 연관관계
- 다대다
- 비관적락
- SQL프로그래밍
- JPQL
- 스프링 폼
- CHECK OPTION
- eager
- exclusive lock
- 지연로딩
- 일대다
- 데코레이터
- 즉시로딩
- 다대일
- 힙
- Today
- Total
흰 스타렉스에서 내가 내리지
로그를 남겨주는 winston 패키지 본문
console.log 나, console.error를 사용하면, 메서드들이 언제 호출되었는지 파악하기 힘들 뿐만 아니라 서버가 종료되는 순간 로그들도 사라진다. 에러가 발생하면 에러 메시지를 확인해야 하는데, 서버가 종료되어 에러 메시지들이 날아가버리는 황당한 일이 일어난다.
이와 같은 상황을 방지하려면 로그를 파일이나 다른 데이터베이스에 저장해야 한다.
// logger.js
const { createLogger, format, transports } = require("winston");
const logger = createLogger({
level: "info",
format: format.json(),
transports: [
new transports.File({ filename: "combined.log" }),
new transports.File({ filename: "error.log", level: "error" }),
],
});
if (process.env.NODE_ENV !== "production") {
logger.add(new transports.Console({ format: format.simple() }));
}
module.exports = logger;
winston 패키지의 createLogger 메서드로 logger를 만든다.
인수로 logger에 대한 설정을 넣어줄 수 있다.
설정으로는 level, format, transports 등이 있다.
- level
level은 로그의 심각도를 의미한다.
[error, warn, info, verbose, debug, silly] 가 있다.
심각도순 (error가 가장 심각)이므로 위 순서를 참고하여 기록하길 원하는 유형의 로그를 고르면 된다.
info를 고른 경우, info보다 심각한 단계의 로그(error, warn)도 함께 기록된다.
- format
format은 로그의 형식이다.
json, label, timestamp, printf, simple, combine 등의 다양한 형식이 있다.
기본적으로는 JSON 형식으로 기록하지만, 로그기록 시간을 표시하려면 timestamp를 쓰는 것이 좋다.
combine은 여러 형식을 혼합해서 사용할 때 쓴다.
활용법이 다양하므로 공식 문서를 참고하자
- transports
transports는 로그 저장 방식을 의미한다.
new transports.File은 파일로 저장한다는 뜻이고, new transports.Console은 콘솔에 출력한다는 뜻이다.
여러 로깅 방식을 동시에 사용할 수도 있다.
배포 환경이 아닌 경우 파일뿐만 아니라 콘솔에도 출력하도록 되어 있다.
이 메서드들에도 level, format 등을 설정할 수 있다.
new transports.File인 경우에는 로그파일의 이름인 filename도 설정할 수 있다.
// app.js
...
...
const logger = require("./logger");
...
...
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
logger.info("hello"); // 추가
logger.error(error.message); // 추가
next(error);
});
...
...
combined.log에는 info와 error 단계의 로그가 저장되어 있고,
error.log에는 error 단계의 로그만 저장되어있다.
winston-daily-rotate-file 이라는 패키지도 있다.
로그를 날짜별로 관리할 수 있게 해주는 패키지다.
https://www.npmjs.com/package/winston
'Node.js' 카테고리의 다른 글
쿠키와 세션 사용해보기 (0) | 2022.06.28 |
---|---|
서버가 꺼졌을 때 자동으로 다시 켜주는 pm2 패키지 (0) | 2022.06.13 |
배포 (0) | 2022.06.12 |
nodeJS 프로젝트 준비 (0) | 2022.06.12 |
미들웨어 속의 미들웨어?? (0) | 2022.05.28 |