talker_http_logger

Lightweight and customizable http_interceptor client logger on talker base.
Talker - Advanced exception handling and logging for dart/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

Getting started

Follow these steps to use this package

Add dependency

dependencies:
  talker_http_logger: ^4.9.1

Usage

Just add TalkerHttpLogger to your InterceptedClient instance and it will work

import 'package:http_interceptor/http_interceptor.dart';
import 'package:talker_http_logger/talker_http_logger.dart';

void main() async {
  final client = InterceptedClient.build(interceptors: [
    TalkerHttpLogger(
      settings: const TalkerHttpLoggerSettings(
        printRequestHeaders: true,
        printResponseHeaders: true,
        printResponseMessage: true,
      ),
    ),
  ]);

  await client.get("https://google.com".toUri());
}

Using with Talker

You can add your talker instance for TalkerHttpLogger if your app already uses Talker.

In this case, all logs and errors will fall into your unified tracking system

import 'package:http_interceptor/http_interceptor.dart';
import 'package:talker_http_logger/talker_http_logger.dart';

void main() async {
  final _talker = Talker();
  final client = InterceptedClient.build(
    /// ... other settings
    interceptors: [
      TalkerHttpLogger(
        /// ... other Talker HTTP Logger settings
        talker: _talker,
      ),
    ]
  );

  await client.get("https://google.com".toUri());

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

final client = InterceptedClient.build(
  /// ... other settings
  interceptors: [
    TalkerHttpLogger(
      talker: _talker,
      settings: const TalkerHttpLoggerSettings(
        // 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 = InterceptedClient(
  /// ... other settings
  interceptors: [
    TalkerHttpLogger(
      talker: _talker,
      settings: const TalkerHttpLoggerSettings(
        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 TalkerHttpLoggerSettings

TalkerHttpLoggerSettings(
  // 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.

TalkerHttpLoggerSettings(
  // All http requests 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,
)

Additional information

The project is under development and ready for your pull-requests and issues 👍
Thank you for support ❤️