logger.js•1.78 kB
import winston from 'winston';
import { join } from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// 로그 레벨 정의
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
// 로그 색상 정의
const colors = {
error: 'red',
warn: 'yellow',
info: 'green',
http: 'magenta',
debug: 'white',
};
winston.addColors(colors);
// 로그 포맷 정의
const format = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
winston.format.colorize({ all: true }),
winston.format.printf(
(info) => `${info.timestamp} ${info.level}: ${info.message}`,
),
);
// 로거 생성
const logger = winston.createLogger({
level: process.env.NODE_ENV === 'development' ? 'debug' : 'info',
levels,
format,
transports: [
// 콘솔 출력
new winston.transports.Console(),
// 파일 출력 (에러)
new winston.transports.File({
filename: join(__dirname, '../logs/error.log'),
level: 'error',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
)
}),
// 파일 출력 (모든 로그)
new winston.transports.File({
filename: join(__dirname, '../logs/combined.log'),
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
)
})
],
});
// 개발 환경에서만 디버그 로그 활성화
if (process.env.NODE_ENV === 'development') {
logger.add(new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
)
}));
}
export default logger;