talker_chopper_logger

A lightweight, flexible HTTP client logger for Chopper built on the Talker platform, offering advanced exception handling and logging for Dart and Flutter applications.

GitHub codecov Pub License: MIT
talker talker_flutter talker_logger

Preview

This is how the logs of your http requests will look in the console

For better understanding how it works check Web Demo page

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_chopper_logger: ^1.0.0

Usage

Simply include the TalkerChopperLogger in your Chopper client’s interceptors list to enable it.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
      ),
    ),
  ],
);

Customization

To offer extensive functionality, TalkerChopperLoggerSettings provides numerous configuration settings and customization options. You can adjust everything to suit your needs. For example:

Enable or disable HTTP request or response logs

You can toggle response / request printing and headers including

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        // All HTTP responses enabled for console logging
        printResponseData: true,
        // All HTTP requests disabled for console logging
        printRequestData: false,
        // Response logs including HTTP - headers
        printResponseHeaders: true,
        // Request logs without HTTP - headers
        printRequestHeaders: false,
      ),
    ),
  ],
);

You can print the curl command for the HTTP request in the console. This is useful for debugging and testing purposes.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        // Print curl command for HTTP request
        printRequestCurl: true,
      ),
    ),
  ],
);

Hiding sensitive HTTP request headers

You can hide sensitive HTTP request headers such as Authorization or Cookie in the console logs. This is useful for security purposes.

final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: _talker,
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        // Hide sensitive HTTP request headers
        hiddenHeaders: {
          'authorization',
          'cookie',
        },
      ),
    ),
  ],
);

Change HTTP logs colors

Customize your HTTP log colors by defining specific colors for requests, responses, and errors in TalkerChopperLoggerSettings

TalkerChopperLoggerSettings(
  // Blue HTTP requests logs in console
  requestPen: AnsiPen()..blue(),
  // Green HTTP responses logs in console
  responsePen: AnsiPen()..green(),
  // Error HTTP logs in console
  errorPen: AnsiPen()..red(),
);

Filter HTTP logs

For instance, if your app includes private functionality that you prefer not to log with talker, you can apply filters.

TalkerChopperLoggerSettings(
  // All http request without "/secure" in path will be printed in console 
  requestFilter: (Request request) => !request.url.path.contains('/secure'),
  // All http responses with status codes different than 301 will be printed in console 
  responseFilter: (Response response) => response.statusCode != 301,
)

Using with existing Talker instance

If your application already uses Talker, simply inject your Talker instance into TalkerChopperLogger so that all logs and errors integrate into your centralized tracking system.

final talker = Talker();
final client = ChopperClient(
  /// ... other chopper settings
  interceptors: [
    TalkerChopperLogger(
      talker: talker,
      settings: const TalkerChopperLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
      ),
    ),
  ],
);

Additional information

This project is actively being developed and welcomes your pull-requests and issue submissions. Thank you for your support. ❤️