프론트엔드 개발을 위한 클라이언트 측 로깅
이 안내서에는 GitLab 프론트엔드 개발을 위한 클라이언트 측 로깅의 모범 사례가 포함되어 있습니다.
브라우저 콘솔에 로그를 남길 때
너무 많은 콘솔 로그는 읽기, 구문 분석 또는 처리하기 어렵기 때문에 브라우저 콘솔에 불필요하게 로그를 남기고 싶지 않습니다. 시스템에서 의도하지 않은 이벤트에 대한 가시성을 제공하길 원합니다. 런타임 중에 가능한데도 예상치 못한 예외가 발생하면 이 예외의 세부 정보를 로깅하길 원합니다. 이러한 로그는 문제를 진단하는 기여자나 이슈를 생성하는 최종 사용자에게 매우 유용한 컨텍스트를 제공할 수 있습니다.
catch(e)
가 존재하고 e
가 예상치 못한 상황이라면 세부 정보를 로깅하세요.
오류를 예기치 못하게 만드는 것은?
가끔 캐치된 예외는 표준 작업의 일부일 수 있습니다. 예를 들어, 타사 라이브러리는 특정 입력을 기반으로 예외를 발생시킬 수 있습니다. 이러한 예외를 우아하게 처리할 수 있다면, 예상되는 것입니다. 불필요하게 로깅하지 마세요.
예를 들어:
try {
// 여기서 우리는 일부 사용자 입력을 기반으로 메서드를 호출합니다.
// 입력이 잘못되었다면 `doAThing`은 예외를 발생시킵니다.
const userInput = getUserInput();
doAThing(userInput);
} catch (e) {
if (e instanceof FooSyntaxError) {
// `FooSyntaxError`를 처리하기 위해 사용자에게 입력을 변경하도록 안내하기만 하면 됩니다.
// 이것은 예상대로, 표준적인 작업의 일부입니다.
setUserMessage(`더 나은 코드를 작성해 보세요. ${e.message}`);
} else {
// `e`가 무엇인지 확신할 수 없으므로, 예기치 못하고 나쁜 일이 발생했습니다...
logError(e);
setUserMessage('예상치 못한 일이 발생했습니다...');
}
}
오류를 로깅하는 방법
~/lib/logger 모듈의 도움을 받아 로깅
GitLab에서 런타임 오류를 일관되게 로깅할 수 있는 ~/lib/logger
모듈이 있습니다. 이 모듈에서 logError
를 가져와서 console.error
를 사용하는 것과 마찬가지로 사용하세요. 실제 Error
객체를 전달하여 스택 추적 및 기타 세부 정보를 로그에 캡처하세요.
// 1. 로거 모듈을 가져옵니다.
import { logError } from '~/lib/logger';
export const doThing = () => {
return foo()
.then(() => {
// ...
})
.catch(e => {
// 2. `logError`를 `console.error`처럼 사용하세요.
logError('일 중에 예상치 못한 오류가 발생했습니다', e);
// 최종 사용자에게 어떤 문제가 발생했는지 안내해도 되고 안내하지 않아도 됩니다.
showThingFailed();
});
};
프론트엔드 관측과의 관련
클라이언트 측 로깅은 프론트엔드 관측과 밀접한 관련이 있습니다. 예기치 못한 오류는 모니터링 시스템에서 관찰되기를 원하므로 사용자에게 빠르게 대응할 수 있습니다. 여러 이유로 모든 로그를 모니터링 시스템으로 보내는 것은 현실적으로 불가능합니다. ~/lib/logger
를 사용하는 것을 꺼리지 마세요. 그러나 ~/lib/logger
로 전달되는 메시지를 모니터링 시스템으로 실제로 전송할 것인지 고려해야 합니다.
일관된 로깅 모듈은 다양한 입구 지점에서 이러한 부작용을 일관되게 제어하는 데 도움이 됩니다.