1.0.12 • Published 2 years ago
@fingerlabs-utils/fingerlabs-logger v1.0.12
fingerlabs-logger
Install
npm install @fingerlabs-utils/fingerlabs-logger
requirements
npm install @types/node --save-dev
로그 정책 관련 내용
로그 출력 정책 : production - console , development - console
로그 레벨 정책 : production - info, development - debug
# 에러 로그 포맷 : “Timestamp + ServiceName + Level + RequestIp + Referrer + xForwardedFor + HttpMethod + Url + ResponseStatus + QueryParams + BodyParams + PathParams + "-" + ResponseTime + Agent + ErrorMessage”
# 예제 : "2022-11-09T07:09:19.981Z" "test" "error" "::ffff:127.0.0.1" "" "" "GET" "/" "200" "{}" "" "{}" - "" "curl/7.84.0" "Test"
# 엑세스 로그 포맷 [Morgan] : “Timestamp + ServiceName + RequestIp + Referrer + xForwardedFor + HttpMethod + Url + ResponseStatus + ResponseBodySize + ResponseTime + Agent”
# 예제 :
# “2022-11-09T07:09:19.981Z" “FingerTheGraph” “15.164.157.43" “https://graph.fingerlabs.io/http/subgraphs/name/bellygom/graphql ” “125.131.114.50" “GET” “/http/subgraphs/name/bellygom” “200” “2079327" - “48.555 ms” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
# 그 외 로그 포맷 [Winston] : “Timestamp + ServiceName + Level + Message”
# 예제 :
# “2022-11-09T07:09:19.981Z" “Favorlet-Service” “warn” “경고 문구”
# “2022-11-09T07:09:19.981Z" “Favorlet-Service” “error” “에러 발생하였습니다”
앞에 Nginx가 있는 서버의 경우 nginx 로그 포맷을 다음과 같이 맞춰주세요
nginx.conf
# nginx access 설정 log format log_format main '$time_local ImportWorker $remote_addr $http_referer' '$http_x_forwarded_for $request $status $body_bytes_sent $request_time $http_user_agent';
How to use
엑세스 로그를 기록할 필요 할 경우. 앞에 Nginx 등의 웹 서버가 없는 Express server
logger-utils.mts(ts) 작성
import fingerlabsLogger from '@fingerlabs-utils/fingerlabs-logger';
export default fingerlabsLogger.getFingerLogger({
serviceName: '서비스명',
nodeEnv: process.env.NODE_ENV,
isHttp: true,
});
서버 사용 케이스 (express에서 로그 사용)
import express from 'express';
import loggerUtils from '../utils/logger-utils.ts';
const {
logger,
startTimeForRequestMiddleware,
errorLogRequestMiddlewareWrapper
} = loggerUtils;
const app: Express = express();
// !!! 이 미들웨어는 가능한 미들웨어 중 최상단에 적용 시켜주시기 바랍니다 !!!
if (startTimeForRequestMiddleware) app.use(startTimeForRequestMiddleware);
// 에러 핸들러 이전에 리퀘스트 로그 미들웨어 적용
if (errorLogRequestMiddlewareWrapper) app.use(errorLogRequestMiddlewareWrapper(logger));
엑세스 로그를 따로 기록할 필요가 없는 경우. 프록시 서버를 경유 하거나 배치성의 서비스
logger-utils.mts(ts) 작성
// 배치성 로그 사용 케이스 (isHttp = false)
import fingerlabsLogger from '@fingerlabs-utils/fingerlabs-logger';
export default fingerlabsLogger.getFingerLogger({
serviceName: '서비스명',
nodeEnv: process.env.NODE_ENV,
});
배치성 로그 사용 케이스 (스케줄러로 돌아가는 배치 스크립트 혹은 앞에 nginx 등의 프록시서버가 있어 Access Log가 이미 기록 되고 있는 서버의 경우.) Beanstalk Worker 등
!!!access log 기록하는 미들웨어를 사용하지 않는다!!
import loggerUtils from '../utils/logger-utils.ts';
const { logger } = loggerUtils;
// 에러 로그는 이렇게 찍어주세요!
logger.error('Error 발생');