Fimber_io는 Dart의 io 라이브러리를 사용하여 파일 기반 로깅 기능을 확장한 Flutter 애플리케이션용 로깅 패키지입니다. 개발자가 장치의 파일에 로그를 지속적으로 캡처하고 저장할 수 있게 해주며, 특히 프로덕션 환경에서 디버깅하는 데 매우 유용합니다. 이 패키지는 Android, iOS, macOS, Windows, Linux 등 여러 플랫폼을 지원하여 크로스플랫폼 앱에 적합합니다. 사용자 정의 가능한 로그 레벨과 포맷터를 통해 앱 동작에 대한 세부적인 통찰력을 제공하면서도 성능과 신뢰성을 유지합니다.
사용 사례
생산 문제 디버깅
지속적인 로그 저장
크로스 플랫폼 로깅
성능 모니터링
오류 추적
주요 기능
파일 기반 로깅
모든 주요 OS에서의 플랫폼 지원
사용자 정의 가능한 로그 레벨
Dart io와의 통합
확장 가능한 포맷터 지원
적합한 대상
지속적인 로그가 필요한 개발자
다중 플랫폼 앱을 개발하는 팀
세부 오류 분석이 필요한 앱
생산 디버깅 워크플로우
로그가 많은 애플리케이션
고려 사항
일부 플랫폼에서는 파일 시스템 권한이 필요합니다
시간이 지남에 따른 잠재적인 디스크 공간 사용량
신중한 로그 회전 전략이 필요합니다
적절히 구성되지 않은 경우 성능에 영향을 줄 수 있습니다
최적화 없이 고주파 로깅에 적합하지 않습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
fimber
Extensible logging for Dart and Flutter.
Package is based on famous Android logging library API - Timber, this is library for simplify logging for Flutter.
Using similar (as far as Dart lang allows) method API with same concepts for tree and planting logging tree.
Also check out flutter_fimber which extends fimber to platform specific output and logging style.
Getting Started
To start add using it:
Add fimber to pubspec.yaml
pre-nullsafety
dependencies:fimber:^0.6.6
remember about import in file you plan to use Fimber
import'package:fimber/fimber.dart';
Initialize logging tree on start of your application
voidmain() {
Fimber.plantTree(DebugTree());
// app code here ...// DebugTree options for time elapsed// by default DebugTree will output timestamp of the VM/Flutter app// to enable elapsed time since planting the tree logFimber.plantTree(DebugTree.elapsed());
}
Start using it with static methods:
import'fimber.dart';
voidmain() {
var parameter = 343.0;
// use directlyFimber.i("Test message $argument");
Fimber.i("Extra error message", ex: Exception("Test thorwable"));
// other log levelsFimber.d("DEBUG");
Fimber.v("VERBOSE");
Fimber.w("WARN");
try {
throwException("Exception thrown");
} catch (e, stacktrace) {
// providing `stacktrace` will better show where issue was thrown// if not provided will use log line location.Fimber.i("Error caught.", ex: e, stacktrace: stacktrace);
}
}
This will log the value and grab a TAG from stacktrace - that is little costly and if more logs will be done per second.
Colorize logs - ColorizeStyle
useColors property set to true will use default colors of the logos, you can change the mapping with in colorizeMap for DebugTree and CustomFormatTree
The useColors by default is disabled.
ColorizeStyle Aggregates list of AnsiStyle so you can combine styles together.
And use its instance inside class, you can create logger for a dart file or for a class.
var logger = FimberLog("MY_TAG");
voidmain() {
logger.d("Test message");
}
// or inside a classclassSomeBloc{
var logger = FimberLog("SomeBloc");
StringfetchMessage() {
logger.d("About to fetch some data.");
//...var data = "load something";
logger.d("Retrived data (len = ${data.length}");
return data;
}
}
Use block function and pass method that uses logger.
Use this function to log multiple messages with same tag, allows optional return value.
Due to nature of auto-tag generation from stacktrace this block only does it once and create local FimberLog instance to pass into the anonymous method.
var someMessage = "Test message from inside of block";
var output = Fimber.block((log) {
log.d("Started block");
var i = 0;
for (i = 0; i < 10; i++) {
log.d("$someMessage, value: $i");
}
log.i("End of block");
return i;
});
Custon line formatters
Use custom line formatters to define your logging format.
Use file log tree - the logs will go to a log file (Useful in DartVM apps).
There are log rolling with size and time/date interval, so it is possible to setup log output per hour/day or any other time.
see: SizeRollingFileTree or TimedRollingFileTree or use abstract class RollingFileTree to create your own version of rolling log file.
Add Crashlytics plugin (maybe other remote logger tools) with flutter_crashlytics
Licence
Copyright2018MateuszPerlakLicensed under the ApacheLicense, Version2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0Unlessrequired by applicable law or agreed to in writing, software
distributed under the Licenseis distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the Licensefor the specific language governing permissions and
limitations under the License.