app_logger.dart 1.26 KB
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';

/// App-wide logger; debug builds use verbose output.
abstract final class AppLogger {
  static Logger? _logger;

  static void init({bool? enableInRelease}) {
    final enabled = enableInRelease ?? kDebugMode;
    _logger = Logger(
      level: enabled ? Level.debug : Level.warning,
      printer: PrettyPrinter(
        methodCount: 0,
        errorMethodCount: 5,
        lineLength: 100,
        colors: true,
        printEmojis: false,
        dateTimeFormat: DateTimeFormat.onlyTimeAndSinceStart,
      ),
    );
  }

  static Logger get _log {
    assert(_logger != null, 'Call AppLogger.init() before logging');
    return _logger!;
  }

  static void d(Object? message, [Object? error, StackTrace? stackTrace]) {
    _log.d(message, error: error, stackTrace: stackTrace);
  }

  static void i(Object? message, [Object? error, StackTrace? stackTrace]) {
    _log.i(message, error: error, stackTrace: stackTrace);
  }

  static void w(Object? message, [Object? error, StackTrace? stackTrace]) {
    _log.w(message, error: error, stackTrace: stackTrace);
  }

  static void e(Object? message, [Object? error, StackTrace? stackTrace]) {
    _log.e(message, error: error, stackTrace: stackTrace);
  }
}