디버그로 감싸기
개요
중요함수에서 dev에서는 log를 찍고 prod 환경에서는 로그를 안찍을 수 있게하는 function 이후 해당 결과를 주기적으로 js객체에 저장해 주기적으로 서버를 보내면 front 단의 log도 서버에서 수집 가능하다.
HOC 로 로그를 출력하는 부분을 밖으로 뺀다 . 작성이후에는 꼭 PRODUCT 레벨에서는 콘솔을 찍지 않도록 해야한다. PRODUCT에서 로그제거
코드
export const wrapWithDebug = <T extends (...args: any[]) => any>(
fn: T,
functionName?: string,
enableLogging: boolean = process.env.API_DOC_ENV !== "prod" //실제 운영환경에서는 result.finally 필요없음
): T => {
return ((...args: Parameters<T>): ReturnType<T> => {
const name = functionName || fn.name || "anonymousFunction";
console.debug(`${name} start`);
const result = fn(...args);
if (result instanceof Promise && enableLogging) {
return result.finally(() => console.debug(`${name} end`)) as ReturnType<T>;
}
console.debug(`${name} end`);
return result;
}) as T;
};