Flutter 앱을 개발하다 보면 print() 함수만으로는 한계가 느껴질 때가 많습니다. 디버깅을 위해 로그를 찍었지만, 원하는 정보가 제대로 보이지 않거나, 출력 순서가 꼬여서 원인을 파악하는 데 애를 먹은 경험이 누구나 있을 겁니다.
이럴 때 유용하게 사용할 수 있는 도구가 바로 logger 패키지입니다. logger는 단순한 로그 출력 그 이상을 제공하며, 개발 초기부터 도입하면 디버깅뿐 아니라 유지보수 단계에서도 매우 큰 도움이 됩니다.
logger가 왜 필요할까?
기본 print() 함수는 너무 단순해서 로그의 종류(예: 에러, 경고, 정보 등)를 구분할 수 없고, 포맷도 일정하지 않아 가독성이 떨어집니다. 반면 logger는 로그 레벨, 컬러 출력, 스택 트레이스 표시, 타임스탬프 등 다양한 기능을 제공해 로그를 훨씬 더 체계적으로 다룰 수 있게 해줍니다.
주요 기능 정리
- 로그 레벨 분류 지원: verbose, debug, info, warning, error, wtf 등으로 로그의 중요도를 구분할 수 있습니다.
- 가독성 높은 출력: 컬러, 들여쓰기, 줄바꿈 등을 지원하여 여러 줄에 걸친 복잡한 로그도 쉽게 읽을 수 있습니다.
- 스택 트레이스 포함 가능: 에러 발생 위치나 함수 호출 순서를 확인할 수 있어 원인 추적이 쉬워집니다.
- 타임스탬프 출력 가능: 로그 발생 시각을 자동으로 포함할 수 있어 시간 흐름에 따른 이슈 추적이 가능합니다.
- 확장성: 원하는 경우 로그를 파일로 저장하거나 서버로 전송할 수 있도록 확장할 수 있습니다.
- JSON 포맷 정렬 지원: API 응답 등 JSON 데이터를 보기 좋게 출력해줍니다.
추가 방법
pubspec.yaml 파일에 다음을 추가하세요:
dependencies:
logger: ^2.0.2+1
사용 예제
import 'package:logger/logger.dart';
final logger = Logger();
void main() {
logger.v("Verbose 로그");
logger.d("디버그 로그");
logger.i("정보 로그");
logger.w("경고 로그");
logger.e("에러 로그", null, StackTrace.current);
logger.wtf("치명적인 오류 로그");
}
커스터마이징 예제
PrettyPrinter를 활용해 로그 출력 포맷을 커스터마이징할 수도 있습니다.
final logger = Logger(
printer: PrettyPrinter(
methodCount: 2, // 호출 메서드 스택 출력 수
errorMethodCount: 8, // 에러 발생 시 보여줄 스택 수
lineLength: 120,
colors: true,
printEmojis: true,
printTime: true,
),
);
이렇게 설정해두면, 예를 들어 API 요청 결과나 에러 발생 위치 등을 보기 좋게 출력할 수 있습니다.
실제 활용 예시
에러 추적: try-catch 문에서 logger.e()를 활용하면 어떤 함수에서 어떤 에러가 발생했는지 한눈에 파악할 수 있습니다.
API 응답 로깅: HTTP 요청 결과를 logger.i() 또는 logger.d()로 기록하면, API가 어떤 응답을 줬는지 디버깅이 훨씬 쉬워집니다.
상태 변화 추적: 앱 상태가 어떻게 변하는지 로깅해두면, 예상치 못한 동작이 발생했을 때 흐름을 파악하기 좋습니다.
마무리하며
Flutter 개발을 하다 보면 로그 관리는 결국 필수적인 작업이 됩니다. 단순한 print()로는 한계가 명확한 만큼, logger 패키지를 통해 로그를 보다 체계적으로 관리해보세요.
처음부터 잘 정리된 로그 시스템을 갖추는 것은 장기적으로 프로젝트 유지보수성과 개발 효율성을 크게 향상시킬 수 있습니다. 특히 팀 개발에서는 통일된 로그 포맷이 큰 도움이 됩니다!!
그럼 오늘도 열코 빡코 !!
'Flutter' 카테고리의 다른 글
Flutter: include of non-modular header inside framework module 'firebase_core.FLTFirebasePlugin' (2) | 2025.05.18 |
---|---|
Flutter에서 API 호출 시 꼭 알아야 할 것들 (2) | 2025.05.13 |
스크롤 중에도 고정되는 헤더 만들기 – flutter_sticky_header 활용법 (0) | 2025.04.02 |
배포 후 카카오 로그인 안될 때 해결 방법 (4) | 2025.04.01 |
Flutter에서 Agora SDK 통합 시 발생하는 aosl.xcframework 충돌 해결하기 (0) | 2025.03.20 |