옵션 중에 로그 파일이름에 날짜를 붙일 수도 있다
| var winston = require('winston'); //로그파일 var winstonDaily = require('winston-daily-rotate-file'); //매일 다른 파일 로그를 생성하는 모듈 var moment = require('moment'); //날짜
|
|
로그를 남기는건 중요하다.
데이터는 곧 힘이 된다. 사람들이 무엇을 원하는지 알면 그들이 원하는 걸 주고 내가 원하는 걸 받을 수 있다.
데이터를 쌓는데 가장 핵심적인 일 중 하나가 로그를 꼼꼼히 남기는 일이다.
node기반의 logging라이브러리는 다양하지만 꽤 오래전부터 winston이라는 라이브러리가 패권을 잡고있다.
오늘은 winston에 대해 알아보자.
프로젝트를 생성하고 winston을 npm으로 설치한다.
npm install --save winston
임포트해보자.
기본 설정
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)()
]
});
그냥 바로 사용해도 되지만 편의상 logger를 만들어서 사용했다.
사실 벌써 끝난거나 다름없다.
logger.debug('디버그 로깅');
logger.info('인포 로깅');
logger.error('에러 로깅');
이런식으로 사용하면 로그가 출력된다.
사실 winston에서 가장 중요한건 transports라고 할 수 있는데, 형식을 정하거나 할 수 있다.
나는 로그를 file로 관리하고, 날짜별로 관리한다면 그것도 가능하다.
우선 타임스탬프부터 찍어보자.
나는 날짜별로 관리하기때문에 시간만 찍어보았다.
타임스탬프 찍기
const winston = require('winston');
const tsFormat = () => (new Date()).toLocaleTimeString();
const logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
timestamp: tsFormat
})
]
});
logger.info('Hello world');
로그레벨은 기본적으로 5가지가 있다.
{ error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }
때에 맞춰 사용하면 더 식별하기 쉬운 로그가 된다.
커스텀도 가능하지만 그건 다루지 않을거고 Winston 공식문서를 참조하자.
파일로 로그 관리하기
먼저 파일로 로그를 관리하기 위해 파일시스템 라이브러리 fs를 설치한다.
풀 코드는 이렇다.
const winston = require('winston');
const fs = require('fs');
const logDir = 'log';
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const tsFormat = () => (new Date()).toLocaleTimeString();
const logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
timestamp: tsFormat,
level: 'info'
}),
new (winston.transports.File)({
level: 'info',
filename: `${logDir}/logs.log`,
timestamp: tsFormat,
maxsize:1000000,
maxFiles:5
})
]
});
로그 디렉토리가 없으면 생성하고 그 아래 로그파일들을 적재하는 코드다.
maxSize를 넘어가면 새로운 파일이 생기고, maxFiles만큼만 생성된다.
logs.log 다음은 logs1.log이런식으로 생성된다.
날짜별로 로그 파일관리하기
원래는 winston안에 daily-rotate-file이 함께 있었는데, 어떤이유에서인지 분리되어 나왔다.
winston-daily-rotate-file을 설치하자
npm install --save winston-daily-rotate-file
풀 소스는 이렇다.
var winston = require('winston');
require('date-utils');
const fs = require('fs');
const logDir = 'log';
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const tsFormat = () => (new Date()).toLocaleTimeString();
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({
timestamp: tsFormat,
colorize: true,
level: 'info'
}),
new (require('winston-daily-rotate-file'))({
level: 'info',
filename: `${logDir}/-logs.log`,
timestamp: tsFormat,
datePattern: 'yyyy-MM-dd',
prepend: true,
})
]
});
이렇게하면 2017-03-03-logs.log라는 파일에 오늘치 로그가 쌓이게 된다.
winston으로 로그관리를 간단히 할 수 있게됬다.
ref : https://isme2n.github.io/devlog/2017/03/03/Winston-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/