일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러스트기초
- chainlink 설명
- 러스트 기초 학습
- ethers
- 스마트컨트렉트프록시
- 티스토리챌린지
- 오블완
- 스마트컨트렉트 함수이름 중복 호출
- 스마트컨트렉트테스트
- ethers type
- 컨트렉트 동일한 함수이름 호출
- Vue.js
- 스마트컨트렉트 예약어 함수이름 중복
- Vue
- 스마트 컨트렉트 함수이름 중복
- 체인의정석
- git rebase
- 머신러닝기초
- 프록시배포구조
- nest.js설명
- ethers v6
- 컨트렉트 배포 자동화
- SBT표준
- vue기초
- rust 기초
- multicall
- ethers typescript
- ambiguous function description
- 러스트 기초
- ethers websocket
- Today
- Total
체인의정석
node.js) dotenv를 이용한 환경변수 분리 및 winston을 이용한 logger 만들기 본문
코드를 서버에 올리게 되면서 logger에 대한 경로나 환경변수 분리 등을 정리해봤다.
먼저 로그를 남기는 경우 winston과 winston-daily-rotate-file을 사용하였다.
"winston": "^3.17.0",
"winston-daily-rotate-file": "^5.0.0",
이렇게 2개를 이용하면 로그 레벨 설정과 파일 관리가 편리하였다.
winston 사용방법은 아래에 정리를 따로 해둔것이 있다.
https://it-timehacker.tistory.com/524
여기서 추가로 설정한 부분은 dot-env를 이용하여 파일 경로를 분리해준 부분, 그리고 로그 레벨 정도를 설정하는 부분이다.
1. DotENV를 사용한 환경 변수 분리
const winston = require('winston');
require('winston-daily-rotate-file');
const dotenv = require('dotenv');
const envPath = process.env.ENV_PATH;
dotenv.config({ path: envPath });
const info_file_path = process.env.LOG_INFO_PATH;
const error_file_path = process.env.ERROR_INFO_PATH;
먼저 위에 처럼 env를 통해서 기록할 각 로그 파일의 경로를 설정해 준다.
envPath의 경우 참고로 package.json에서 스크립트를 실행할때 넣어주는 형태로 작성하였다.
"scripts": {
"dev": "ENV_PATH=.dev.env node 실행할 파일.js",
"prod": "ENV_PATH=.prod.env node 실행할 파일.js"
},
npm run dev, npm run prod 이런식으로 스크립트를 실행하면 EVN_PATH가 설정되면서 스크립트가 실행되는데 여기서 env파일의 경로를 받아오기 때문에 이후에 각 env파일 (예시에서는 dev.env, prod.env)에 정의해둔 LOG_INFO_PATH, ERROR_INFO_PATH에서 로그 파일 경로를 입력하게 되면 로그 파일 경로를 설정해 줄 수 있다.
이후 아래와 같이 DailyRotateFile 모듈을 사용해서 파일 경로별로 로그파일이 다르게 나오게 만들 수 있다. 물론 이때 로그를 얼마나 유지할지와 같은 설정도 넣을 수는 있지만 여기서는 제외하였다.
// Daily Rotate File Transport for info level
const infoTransport = new winston.transports.DailyRotateFile({
level: 'info',
filename: `${info_file_path}/info-%DATE%.log`,
datePattern: 'YYYY-MM-DD', // 하루에 하나의 파일 생성
zippedArchive: true
});
// Daily Rotate File Transport for error level
const errorTransport = new winston.transports.DailyRotateFile({
level: 'error',
filename: `${error_file_path}/error-%DATE%.log`,
datePattern: 'YYYY-MM-DD', // 하루에 하나의 파일 생성
zippedArchive: true
});
2. 로그레벨 관리
로그 레벨의 경우 여기서는 1까지로 지정을 하였는데, 0은 에러를 1은 info를 의미한다. 위에서 각각 infoTransport, errorTransport를 정의했기 때문에 이를 이용하면 아래와 같은 코드가 나온다.
const logger = winston.createLogger({
levels: {
error: 0,
info: 1
},
transports: [
infoTransport,
errorTransport,
new winston.transports.Console({
level: 'info', // Console 출력 최소 레벨
})
],
format: winston.format.combine(
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => {
return `${timestamp} [${level}]: ${message}`;
})
)
});
마지막으로 모듈 exports를 해서 로깅이 필요한 부분마다 logger를 가져와서 사용을 하면 된다.
module.exports = {
logger
}
logger.info, logger.error 이런식으로 하면되고 로그 레벨을 더 세분화 시켜야 한다면 더 세분화 시킬 수 도 있다.
'개발 > backend' 카테고리의 다른 글
node.js) UTC 시간 기준으로 날짜를 저장하는 방법, blocktimestamp로 부터 UTC시간 도출하는 방법 (0) | 2024.11.21 |
---|---|
node.js) mysql2를 사용하여 db query, insert 하는 코드 (0) | 2024.11.21 |
winston으로 백엔드 로그 관리하기 (1) | 2024.09.04 |
주기적으로 재시작 하는 node.js 프로그램 만들기 (pm2 ecosystem, crone) (1) | 2024.07.05 |
mac에서 Jmeter 설치 및 사용해서 api 테스트해보기 (0) | 2024.02.13 |