오랜만에 포스팅을 합니다.
운영중인 프로그램이 대규모 업데이트가 연속적으로 이루어지고있어
포스팅할 시간이 없네요.
대규모 업데이트를 하다본니, 이것만큼은 꼭 공유해주고 싶다! 라고 생각이 든 파트가 있어 포스팅하게되었습니다.
바로 로깅 시스템인데요.
다양한 라이브러리에서 로깅시스템을 지원해주지만,
내가 만들어 자유자재로 쓰는 가벼운 로깅시스템은 디버깅에서 최고의 효율은 발휘해주는것 같습니다.
예를들어, try/catch구문에서 해당 코드의 디렉토리 위치부터 에러발생 시간, 에러 내용을 모두 표시해준다면
에러복구에 정말 유용하겠죠?
따라서, fs시스템을 이용해 간단한 로깅메서드를 만들어 해당 시스템을 구축해 보도록 하겠습니다.
# 순서
1. 로깅 메서드 만들기
2. 활용 예제
3. 응용 예제
1. 로깅 메서드 만들기
const fs = require('fs');
const moment = require('moment');
export const logging = log => {
const today = moment().format('YYYYMMDD');
const date = moment().format('YYYY.MM.DD HH:mm:ss');
const file = `./log/${today}_server.log`;
const newLine = `[${date}] - ${log}`;
fs.readFile(file, (err, data) => {
if (err) {
return console.error('read log err: ', err);
}
fs.writeFile(file, data + '\n' + newLine, err => {
if (err) {
return console.error('write log err: ', err);
}
});
});
};
# 예제 키워드: fs, moment, 백틱
파일을 읽어오고 줄을 바꿔 내용을 덧붙이는 예제입니다.
writeFile은 해당 파일이 존재하지 않으면 기본적으로 create & write하게 되어있습니다.
(추가적으로, 해당 옵션은 flag옵션으로 변경가능합니다.)
2. 활용 예제
const { logging } = require('./util');
try {
// something ...
} catch(error) {
console.log('check system error log: ', error); // 콘솔에서 에러 확인 (개발에 활용)
logging(error); // 로그파일에 기록 (나중에 확인하기 위함)
return 'error;
}
우리의 logging 예제코드가 util파일에 있다고 가정했을때의 예제입니다.
이렇게, logging(error) 한줄 추가해주는것만으로
" [날짜] - 에러내용 "
구조의 에러 리포트를 누적해둘수있습니다.
예외처리에 빠짐없이 잘 써둔다면 디버깅에서 아주 유용하게 쓰일것으로 보입니다.
좀더 실용적이고 쓸만한 메서드로 개선해볼까요
3. 응용예제
# util
const fs = require('fs');
const moment = require('moment');
export const logging = (log, dir) => {
const today = moment().format('YYYYMMDD');
const date = moment().format('YYYY.MM.DD HH:mm:ss');
const file = `./log/${today}_server.log`;
const newLine = `[${date}] - ${log} ${ dir ? '\n'+ 'directory: ' + dir : ''}`;
fs.readFile(file, (err, data) => {
if (err) {
return console.error('read log err: ', err);
}
fs.writeFile(file, data + '\n' + newLine, err => {
if (err) {
return console.error('write log err: ', err);
}
});
});
};
# server
const { logging } = require('./util');
try {
// something ...
} catch(error) {
console.log('check system error log: ', error); // 콘솔에서 에러 확인 (개발에 활용)
logging(error, __filename); // 로그파일에 기록 (나중에 확인하기 위함)
return 'error;
}
# 예제 키워드: __filename
이렇게 간단한 수정만으로 파일의 디렉토리까지 남겨가며 모든 에러를 추적하게됩니다.
'개발, 코딩 > Node' 카테고리의 다른 글
[Node js] 서버로부터 buffer 형식으로 파일 전송받아 처리하기 (0) | 2021.07.28 |
---|---|
node.js - canvas (0) | 2021.03.31 |
PM2로 node cluster 효과내기 (0) | 2020.10.29 |
비대칭키(공개키 활용)를 이용한 양방향 통신 암호화 (0) | 2020.03.13 |
nodejs with youtube api (2) (0) | 2019.10.24 |