일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Android
- PoLAB
- 유니티
- 딥러닝
- xcode
- 수능
- 1등급사과
- 바른생수
- 모의고사
- Firebase
- 플레이스토어
- ios
- 개발
- 내신
- 수학가형21번
- 포랩
- LineRenderer
- MNIST
- 생명과학1
- 고등학교
- JavaScript
- 고등학생
- 코틀린
- customdialog
- 개발일지
- kotlin
- 과탐
- 생명과학
- Unity
- 수학가형
Archives
- Today
- Total
수학적 접근
[2022/10/07] 라이언의 개발일지 본문
반응형
PoLAB API - 서버 로그 찍기
- 서버 로그를 찍기 위해 사용하는 패키지: winston
- winston, winston-daily-rotate-file 설치
- winston-daily-rotate-file 은 로그를 일자별로 파일 저장하기 위해 사용함
- 아래 블로그 참고하여 기능 구현
- 최종적으로 완성한 logger.js
import winston from 'winston';
import winstonDaily from 'winston-daily-rotate-file';
import process from 'process';
import dotenv from 'dotenv';
import util from 'util';
dotenv.config(); // NODE_ENV 정의
const { combine, timestamp, label, printf } = winston.format;
const logDir = `${process.cwd()}/logs`;
const logFormat = printf(({ level, message, label, timestamp }) => {
level = level.toUpperCase();
return `${timestamp} [${label}] ${level}: ${util.format('%o', 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' }),
label({ label: '***' }), // 어플리케이션 이름
logFormat, // log 출력 포맷
//? format: combine() 에서 정의한 timestamp와 label 형식값이 logFormat에 들어가서 정의되게 된다. level이나 message는 콘솔에서 자동 정의
),
//* 실제 로그를 어떻게 기록을 한 것인가 정의
transports: [
//* 전체 레벨 로그를 저장할 파일 설정
new winstonDaily({
level: 'silly',
datePattern: 'YYYY-MM-DD',
dirname: logDir, // 파일 경로
filename: `***`,
maxFiles: 365,
zippedArchive: true,
}),
//* info 레벨 로그를 저장할 파일 설정 (info: 2 보다 높은 error: 0 와 warn: 1 로그들도 자동 포함해서 저장)
new winstonDaily({
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir, // 파일 경로
filename: `***`,
maxFiles: 365,
zippedArchive: true,
}),
//* error 레벨 로그를 저장할 파일 설정 (info에 자동 포함되지만 일부러 따로 빼서 설정)
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir + '/error',
filename: `***`,
maxFiles: 365,
zippedArchive: true,
}),
],
//* uncaughtException 발생시 파일 설정
exceptionHandlers: [
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `***`,
maxFiles: 365,
zippedArchive: true,
}),
],
});
//* Production 환경이 아닌, 개발 환경일 경우 파일 들어가서 일일히 로그 확인하기 번거로우니까 화면에서 바로 찍게 설정 (로그 파일은 여전히 생성됨)
if (process.env.NODE_ENV !== 'production') {
logger.add(
new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize(), // 색깔 넣어서 출력
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
label({ label: '***' }),
logFormat,
),
}),
);
}
/* 기타 필요한 유틸리티 메서드 정의함 (생략) */
export default logger;
export {
//유틸리티 메서드들
};
- util.format : json 형식의 로그를 제대로 출력하기 위해서 사용. 따로 처리하지 않으면 [Object object] 와 같이 표시된다.
- dev에서 테스트 후 본 서버 적용 완료
- 본 서버 적용 중 log 저장 디렉토리에 permission 에러가 발생하여 이를 해결함
금요일이니까 일찍 들어가자!
반응형
'개발일지 > 2022' 카테고리의 다른 글
[2022/10/13] 라이언의 개발일지 (0) | 2022.10.13 |
---|---|
[2022/10/12] 라이언의 개발일지 (0) | 2022.10.12 |
[2022/10/11] 라이언의 개발일지 (0) | 2022.10.11 |
[2022/10/06] 라이언의 개발일지 (0) | 2022.10.06 |
[2022/10/05] 라이언의 개발일지 (0) | 2022.10.06 |
Comments