Winston#
Winston은 Node.js 애플리케이션을 위한 다목적 로깅 라이브러리.
Winston의 주요 특징#
- 다중 전송(Transport) 지원: 로그를 콘솔, 파일, 데이터베이스 등 여러 곳에 동시에 저장할 수 있다.
- 로그 레벨: error, warn, info, verbose, debug, silly 등 다양한 로그 레벨을 제공한다.
- 유연한 포맷팅: JSON, 일반 텍스트 등 다양한 형식으로 로그를 출력할 수 있다.
- 비동기 로깅: 로그 작성이 애플리케이션의 성능에 영향을 미치지 않도록 비동기적으로 처리한다.
Winston의 장점#
- 유연성: 다양한 로깅 요구사항을 쉽게 충족시킬 수 있다.
- 확장성: 커스텀 전송 방식을 만들어 사용할 수 있다.
- 성능: 비동기 로깅으로 애플리케이션 성능에 미치는 영향을 최소화한다.
Winston 시작하기: 단계별 안내 🧭#
1. 설치하기#
터미널에서 다음 명령어를 실행하세요:
2. 기본 로거 생성하기#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| const winston = require('winston');
// 기본 로거 생성
const logger = winston.createLogger({
level: 'info', // 로깅 레벨 설정
format: winston.format.simple(), // 로그 형식
transports: [
// 콘솔에 로그 출력
new winston.transports.Console(),
// 파일에 로그 저장
new winston.transports.File({ filename: 'app.log' })
]
});
// 로그 사용하기
logger.info('안녕하세요, Winston!');
logger.warn('주의가 필요한 상황');
logger.error('에러가 발생했습니다');
|
3. 로그 레벨 이해하기#
Winston은 다음과 같은 로그 레벨을 제공합니다:
error
: 심각한 오류warn
: 경고 메시지info
: 일반 정보http
: HTTP 요청 관련 정보verbose
: 상세 정보debug
: 디버깅 정보silly
: 가장 상세한 로깅
4. 고급 로깅 설정#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| const logger = winston.createLogger({
level: 'debug', // 디버그 레벨 이상의 로그 기록
format: winston.format.combine(
winston.format.timestamp({ // 타임스탬프 추가
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.json() // JSON 형식으로 로그 저장
),
transports: [
// 콘솔 로깅
new winston.transports.Console({
format: winston.format.colorize({ all: true })
}),
// 에러 로그 파일
new winston.transports.File({
filename: 'error.log',
level: 'error'
}),
// 일반 로그 파일
new winston.transports.File({
filename: 'combined.log'
})
]
});
|
5. 실제 애플리케이션에서의 활용#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| function processUserLogin(username) {
try {
logger.info(`사용자 로그인 시도: ${username}`);
// 로그인 로직
logger.info(`사용자 로그인 성공: ${username}`);
} catch (error) {
logger.error(`로그인 실패: ${username}`, {
error: error.message,
stack: error.stack
});
}
}
|
참고 및 출처#
GitHub - winstonjs/winston: A logger for just about everything.