67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import winston from "winston";
|
|
import config from "../config/environment";
|
|
|
|
// 로그 포맷 정의
|
|
const logFormat = winston.format.combine(
|
|
winston.format.timestamp({
|
|
format: "YYYY-MM-DD HH:mm:ss",
|
|
}),
|
|
winston.format.errors({ stack: true }),
|
|
winston.format.json()
|
|
);
|
|
|
|
// 콘솔 포맷 (개발 환경용)
|
|
const consoleFormat = winston.format.combine(
|
|
winston.format.colorize(),
|
|
winston.format.timestamp({
|
|
format: "YYYY-MM-DD HH:mm:ss",
|
|
}),
|
|
winston.format.printf(({ timestamp, level, message, stack }) => {
|
|
if (stack) {
|
|
return `${timestamp} [${level}]: ${message}\n${stack}`;
|
|
}
|
|
return `${timestamp} [${level}]: ${message}`;
|
|
})
|
|
);
|
|
|
|
// 로거 생성
|
|
export const logger = winston.createLogger({
|
|
level: config.logging.level,
|
|
format: logFormat,
|
|
transports: [
|
|
// 파일 로그 (에러)
|
|
new winston.transports.File({
|
|
filename: "logs/error.log",
|
|
level: "error",
|
|
maxsize: 5242880, // 5MB
|
|
maxFiles: 5,
|
|
}),
|
|
// 파일 로그 (전체)
|
|
new winston.transports.File({
|
|
filename: "logs/combined.log",
|
|
maxsize: 5242880, // 5MB
|
|
maxFiles: 5,
|
|
}),
|
|
],
|
|
});
|
|
|
|
// 개발 환경에서는 콘솔 출력 추가
|
|
if (config.nodeEnv !== "production") {
|
|
logger.add(
|
|
new winston.transports.Console({
|
|
format: consoleFormat,
|
|
})
|
|
);
|
|
}
|
|
|
|
// 로그 디렉토리 생성
|
|
import fs from "fs";
|
|
import path from "path";
|
|
|
|
const logsDir = path.join(process.cwd(), "logs");
|
|
if (!fs.existsSync(logsDir)) {
|
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
}
|
|
|
|
export default logger;
|