Skip to content

vivasoft-ltd/flutter_logger

Repository files navigation

flutter_logger

A library that provides nesseary classes to implement logging functionality in flutter app

How to import

We will need to add following in the pubspec.yaml file in dependency section

  flutter_logger:
    git:
      url: git@bitbucket.org:vivacomsolution/flutter_logger.git
      ref: master

Documentation

enum LoggerLevel {
  verbose,
  debug,
  info,
  warning,
  error,
}

We have our own logging level so that we can handle logging, This solves the problem of tight coupling with thrid party library.

class VLogger {
  final FlutterLoggerClient _client;
  VLogger(this._client);

  void debug(String message, [Object? error, StackTrace? stackTrace]) {
    _client.log(LoggerLevel.debug, message, error, stackTrace);
  }

  void info(String message, [Object? error, StackTrace? stackTrace]) {
    _client.log(LoggerLevel.info, message, error, stackTrace);
  }

  void error(String message, [Object? error, StackTrace? stackTrace]) {
    _client.log(LoggerLevel.error, message, error, stackTrace);
  }

  void verbose(String message, [Object? error, StackTrace? stackTrace]) {
    _client.log(LoggerLevel.verbose, message, error, stackTrace);
  }

  void warning(String message, [Object? error, StackTrace? stackTrace]) {
    _client.log(LoggerLevel.warning, message, error, stackTrace);
  }
}

we will use directly abvoe VLogger class to log whatever we want to log. We will need to provide an implementation of FlutterLoggerClient class. And this class looks like following.

abstract class FlutterLoggerClient{
  void log(LoggerLevel level, String message, [Object? error, StackTrace? stackTrace] );
}

This is the interface or contract how logger is implemented. As we can have different implementations of FlutterLoggerClient. Let's look on some implementation class of this FlutterLoggerClient interface.

class ConsoleLoggerClient extends FlutterLoggerClient {
  late final Logger _instance;
  ConsoleLoggerClient({
    required Logger logger
  }){
    _instance = logger;
    Logger.level = Level.verbose;
  }
  @override
  void log(LoggerLevel level, String message, [Object? error, StackTrace? stackTrace]) {
    if(level == LoggerLevel.verbose){
      _instance.v(message,error,stackTrace);
    }
    else if(level == LoggerLevel.debug){
      _instance.d(message,error,stackTrace);

    }
    else if(level == LoggerLevel.info){
      _instance.i(message,error,stackTrace);

    }
    else if(level == LoggerLevel.warning){
      _instance.w(message,error,stackTrace);

    }
    else if(level == LoggerLevel.error){
      _instance.e(message,error,stackTrace);

    }
  }

} 

ConsoleLoggerClient simply will log in console. Here we have used a thirdy party library named logger that provides some pretty logging opurtunity in console. The same way we have FileLoggerClient where can specify where to log and log printer.

class ProdLogger implements FlutterLoggerClient {
  late FlutterLoggerClient _vivaLoggerClient;
  late LogSettingsProvider _logSettingsProvider;
  ProdLogger(FlutterLoggerClient vivaLoggerClient,
      LogSettingsProvider logSettingsProvider) {
    _vivaLoggerClient = vivaLoggerClient;
    _logSettingsProvider = logSettingsProvider;
  }

  @override
  void log(LoggerLevel level, String message,
      [Object? error, StackTrace? stackTrace]) {
    if (_logSettingsProvider.isLogEnable() == false ||
        _logSettingsProvider.logLevel().index > level.index) {
      return;
    }
    _vivaLoggerClient.log(level, message, error, stackTrace);
  }
}

Here in the ProdLogger we have used decoration desing pattern to add behaviour in the logging functionality. So , we can here specify loggging client along with our preffered Log settings.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors