오늘은 NodeJS의 모듈 중 Winston을 사용해서,
Logging을 하는 것에 대해서 정리해 보겠습니다.
1. winston 설치
제일 먼저 해야할 것은 winston 모듈을 설치하는 것인데요.
아래 명령어로 winston을 설치해 줍니다.
npm install winston --save
그럼 아래와 같이 winston과 하위 모듈들이 설치된 것을 볼 수 있습니다.
이제, 설치가 된 winston을 변수에 담아서 사용해야 하는데요.
winston이라는 변수에 담아서 사용하겠습니다.
2. Logging Level
본격적으로 winston에 대해서 알아보기 전에,
사용할 수 있는, 로깅 레벨에 대해서 알아보겠습니다.
다음과 같이 6단계로 나누어 사용할 수 있습니다.
error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5
(https://github.com/winstonjs/winston)
3. logger생성
level은 <2. LogginLevel>의 winston logging Level을 의미하구요.
info라고 해서, info레벨만 로깅하는 것은 아니구요.
info레벨 이하의 것들을 로깅한다는 의미입니다.
먼저 logging한 파일을 저장할 디렉토리를 지정해야 하는데요.
디렉토리의 이름은 log라고 하겠습니다.
로그 디렉토리를 만들기 위해, fs모듈이 필요하구요.
existsSync메소드를 사용해서,
log파일들을 모아놓을 log디렉토리가 없으면 만들도록 하겠습니다.
(물론 미리 디렉토리를 확실하게 미리 만들어 놓아도 무관합니다.)
디렉토리는 path.join을 사용하여,
위에서 생성한 디렉토리를 사용하도록 하겠습니다.
const fs = require('fs');
const path = require('path');
const logDir = 'log';
if (!fs.existsSync(logDir)) fs.mkdirSync(logDir);
const logFilename = path.join(__dirname, '/../', logDir, '/created-logfile.log');
이제 transports에 대해서 정의해 보겠습니다.
<3. logger생성>에서 정의한 Console이외에, file에 대해서도 추가해 볼텐데요.
transport대상에 대해 정의할 때, 사용할 수 있는 여러가지 propery들이 있는데, 사용해 보겠습니다.
name은 file을 두번 사용하는 경우와 같이 중복으로 사용할 때, 구분자로서 역할을 하구요.
json형식으로 출력하고자 할 때는, json,
최대 파일사이즈와 최대 파일수를 지정할 수 있는, maxsize, maxFiles도 있습니다.
그리고 가장 중요한 filename인데요.
이 부분에서 잘못 지정하면 로깅파일이 생성되지 않습니다.
디렉토리와 파일명을 정확하게 지정해주어야 합니다.
이제 이렇게 정의한 transports값을 넣어주기만 하면 됩니다.
5. 일자별로 Log파일 만들기
일자별로 매일 logging을 하고자 할 수도 있는데요.
이 때는, 모듈이 하나 더 필요합니다. winston-daily-rotate-file 인데요.
먼저 모듈을 설치해 주겠습니다.
npm install winston-daily-rotate-file --save
transport값에 들어가는 property는,
filename, datePattern 등이 있습니다.
역시 가장 중요한 것은 filename이 되겠네요.
let transport = new (winston.transports.DailyRotateFile)({
filename: logFilename,
datePattern: 'yyyy-MM-dd',
prepend: true
});
datePattern은 위에서 기술한 것이외에도 추가적으로 사용할 수 있는데요.
아래와 같습니다.
(https://github.com/winstonjs/winston-daily-rotate-file)
'NodeJS' 카테고리의 다른 글
NodeJS ErrorCode 정리 (0) | 2019.03.31 |
---|---|
NodeJS에서 활용하는 process.env (1) | 2019.03.26 |
NodeJS 에서 Crash 후 재시작에 필요한 PM2 (0) | 2017.10.23 |
NodeJS에서 node-schedule이용한 스케쥴러 작업 (0) | 2017.10.11 |
NodeJS에서 module.exports 사용하여 routing하기 (0) | 2017.08.12 |