현재 상황

현재 에러 로깅 기준이 명확하지 않아, 어느 위치에 어느 기준으로 로깅을 남길지 모호함.

그렇다보니 err가 발생하는 모든 부분에 로깅을 남기는 것이 대부분

func api() {
	err := service.doSomething()
	if err != nil {
		fmt.Println(err)
		return 
	}
	return
}

// service.go
func doSomething() error {
	err := manager.doSomething()
	if err != nil {
		fmt.Println(err)
		return err
	}
	return nil
}

// manager.go
func doSomething() error {
	err := ...
	if err != nil {
		fmt.Println(err)
		return err
	}
	return nil
}

또한, 함수 내에서 발생한 에러가 어떤 로그 레벨을 가져야하는지 애매한 경우가 있음

singleResult := mongoMgr.FindOne()
userDoc, err := manager.decodeUserDocument(singleResult)
if err != nil {
	log.ErrorLog("err:%s", err.Error())
	return userDoc, ERROR_INTERNAL_SERVER, err
}
if userDoc == nil {
	log.WarnLog("user document not found")
	return nil, ERROR_USER_NOT_REGISTERED, errors.New("user document not found")
}
return userDoc, SUCCESS, nil

이와 같은 상황에서, Error를 어떻게 처리하고 로깅할 것인지 기준을 세우면 좋을 것 같음

로그 레벨(참고 자료: 로그라고해서 다 같은 로그가 아니다)

Error

Error(오류) 레벨은 서비스 동작에 이상이 있을 정도로 문제가 발생한 경우입니다. DB 커넥션 오류나, 디스크 저장 공간 부족 등의 상황이 이에 속합니다. ****Error 로그가 등장하면, 당일 근무시간 내에 운영 담당자가 확인 조치하고 해당 사항에 대해 공유해야 합니다. 동일한 Error가 반복해서 발생한다면, 근무시간 외라도 즉시 확인 조치해서 공유해야 합니다.

Warning

Warning(경고) 레벨은 자동으로 복구되어 동작에는 이상이 없지만, 추후 장애로 이어질 수 있는 문제가 발생한 경우입니다. 커넥션 재시도, 백업 서버로 변경 등의 상황이 이에 속합니다. Warning 로그가 등장하면, 발생량 추이를 확인해 1~2주 내로 확인 조치를 해야 합니다.

Info

Info(알림) 레벨은 시스템 동작 상에서 특정 작업이 정상적으로 수행됐음을 알려주는 경우입니다. 이때 단위 작업(Unit of Work)을 같이 알려줘야 합니다. 주로 서비스 시작 및 종료나 특정 단위 등록 및 삭제 등의 상황이 이에 속합니다. Info 로그는 정상적으로 완료한 작업양을 측정하거나, 시스템 환경이나 설정 정보를 확인할 때 사용합니다.

Debug