728x90
반응형
프로젝트를 진행하다보면 로깅의 필요성을 절실히 깨닫게 된다.
예를 들어 어떤 정보가 오고 갔는지, 에러가 떠서 프로그램이 멈췄을 경우 어떤 에러가 발생했었는지 등 활용 방안은 여러가지가 있다.
바로 시작해보자.
1. 필요한 npm 패키지를 설치한다.
$ npm install winston winston-daily-rotate-file --save
2. winston logger config 파일 작성
./config/winston.js
import winston from 'winston';
import winstonDaily from 'winston-daily-rotate-file';
const logDir = 'logs'; // logs 디렉토리 하위에 로그 파일 저장
const { combine, timestamp, printf } = winston.format;
// Define log format
const logFormat = printf(info => {
return `${info.timestamp} ${info.level}: ${info.message}`;
});
/*
* Log Level
* error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
*/
const logger = winston.createLogger({
format: combine(
timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
logFormat,
),
transports: [
// info 레벨 로그를 저장할 파일 설정
new winstonDaily({
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `%DATE%.log`,
maxFiles: 30, // 30일치 로그 파일 저장
zippedArchive: true,
}),
// error 레벨 로그를 저장할 파일 설정
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir + '/error', // error.log 파일은 /logs/error 하위에 저장
filename: `%DATE%.error.log`,
maxFiles: 30,
zippedArchive: true,
}),
],
});
// Production 환경이 아닌 경우(dev 등)
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(), // 색깔 넣어서 출력
winston.format.simple(), // `${info.level}: ${info.message} JSON.stringify({ ...rest })` 포맷으로 출력
)
}));
}
export { logger };
// module.exports = { logger };
로그 레벨에 따라서 저장하는 파일 위치와 파일 명을 설정할 수도 있다.
error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
3. log관리가 필요한 라우터에 import 하고 logger를 사용한다.
import express from 'express';
import { logger } from './config/winston';
const app = express().Application;
app.listen(3000, () => {
logger.info('Server listening on port 3000');
});
app.get('/', (req, res) => {
logger.info('GET /');
res.sendStatus(200);
});
app.get('/error', (req, res) => {
logger.error('Error message');
res.sendStatus(500);
});
4. 파일이 제대로 생기는지 확인해본다.
728x90
반응형
'Back-End > Node.js' 카테고리의 다른 글
Node.js | 웹 크롤링 API 서버 만들기(Windows) | Selenium Crawling Server in Windows | 환경세팅 (0) | 2022.07.29 |
---|---|
Node.js | winston으로 로깅(Logging) 미들웨어 만들기 (2) (0) | 2022.05.26 |
Node.js | Multer 를 이용한 AWS S3 파일 업로드 구현(4) | React(Next.js) url image download (0) | 2022.04.27 |
Node.js | Multer 를 이용한 AWS S3 파일 업로드 구현(3) (0) | 2022.04.27 |
Node.js | Multer 를 이용한 AWS S3 파일 업로드 구현(2) (0) | 2022.04.27 |