`print()`로 로그를 출력하면 다음과 같은 경고 메세지가 뜬다. 지금까지는 이 메세지를 그냥 무시해 왔는데 앱을 배포하기 위해서는 릴리즈 모드에서 로그가 출력되지 않도록 할 필요성을 느꼈다.
프로덕션 코드에서는 print() 호출을 피해라
DO avoid `print` calls in production code.
For production code, consider using a logging framework. If you are using Flutter, you can use `debugPrint` or surround `print` calls with a check for `kDebugMode`
다트 공식문서에서 프로덕션 코드에서는 `print()`를 피하라는 경고와 함께, 로그를 출력할 다른 방법들을 제시하고 있다.
debugPrint(), log()
BAD:
print('This is a print statement.');
GOOD:
import 'package:flutter/foundation.dart';
debugPrint('This is a debugPrint statement.');
GOOD:
import 'dart:developer';
void main() {
log('This is a log statement.',
name: 'MyApp',
error: 'Sample Error',
stackTrace: StackTrace.current,
);
}
print()
- 가장 단순한 출력 방법.
- 1024자를 초과하는 긴 메시지를 출력할 때는 잘릴 수 있음.
- 디버그 모드와 릴리즈 모드에서 모두 작동함. (릴리즈 모드에서 로그가 노출될 수 있음)
debugPrint()
- 긴 메시지도 자동으로 분할해서 출력하기 때문에 잘리지 않음.
- 디버그 모드에서만 작동함.
log()
- `dart:developer` 패키지에서 제공하는 함수.
- 로그 레벨, 태그, 오류 데이터 등 메타데이터를 추가한 더욱 구조화된 로그를 출력할 수 있음.
- 디버깅 툴에서 더 잘 읽히도록 설계됨. (DevTools에서 활용 가능)
- 디버그 모드와 릴리즈 모드에서 작동하지만, 릴리즈 모드에서는 보통 비활성화됨.
kDebugMode
GOOD:
import 'package:flutter/foundation.dart';
void logMessage(String message) {
if (kDebugMode) {
print(message); // 디버그 모드에서만 로그 출력
}
}
- `kDebugMode`는 `package:flutter/foundation.dart`에서 제공하는 상수로, 앱이 디버그 모드에서 실행 중일 때 `true`, 릴리즈 모드에서는 `false`를 반환한다.
참고