l 3.2.0 copy "l: ^3.2.0" to clipboard
l: ^3.2.0 copied to clipboard

Cross-platform html/io Logger library with simple API. Manipulate with native and web console. Support ascii colorize output.

[L]ogger #

Logger Coverage License: WTFPL Linter

About #

Cross-platform html/io logger with simple API.
No need to create an logger object. Just import and use. Simple and w/o boilerplate.
Work with native console.


Core API #

Key features #

Method Description
[s] A shout is always displayed
[v1], [v] Regular message with verbose level 1
[e] Error message with verbose level 1
[v2], [vv] Regular message with verbose level 2
[w] Warning message with verbose level 2
[v3], [vvv] Regular message with verbose level 3
[i], [<] Inform message with verbose level 3
[v4], [vvvv] Regular message with verbose level 4
[d], [<<] Debug message with verbose level 4
[v5], [vvvvv] Regular message with verbose level 5
[v6], [vvvvvv] Regular message with verbose level 6
l.s('shout me');
l.e('error msg');
l.w('warning msg');
l.i('info msg');
l < 'alt info msg';
l.d('debug msg');
l << 'alt debug msg';
l.v('verbose lvl #1');
l.vv('verbose lvl #2');
l.vvv('verbose lvl #3');
l.v4('verbose lvl #4');
l.v5('verbose lvl #5');
l.v6('verbose lvl #6');

Integration capabilities #

Method Description
[listen] Broadcast stream receiving logs.
// Broadcast stream instantly receiving logs.
l.forEach((log) => print('* ${log.level} : ${log.message}'));

Logger supports fine-tuning with second argument LogOptions in l.capture method. Also, you can handle print and output with l on some function or in a whole app with this simple syntax:

import 'package:l/l.dart';

void main() => l.capture(
      someFunction,
      const LogOptions(
        handlePrint: true,
        printColors: true,
        outputInRelease: false,
        messageFormatting: _messageFormatting,
      ),
    );

Future<void> someFunction() async {
  print('Hello');
  await Future<void>.delayed(const Duration(milliseconds: 150));
  l.d('world');
  await Future<void>.delayed(const Duration(milliseconds: 150));
  l.e('!!!');
}

Object _messageFormatting(Object message, LogLevel logLevel, DateTime now) =>
    '${now.hour}:${now.minute.toString().padLeft(2, '0')} $message';

Handling errors #

Flutter #

final sourceFlutterError = FlutterError.onError;
FlutterError.onError = (details) {
  l.w(details.exceptionAsString(), details.stack);
  sourceFlutterError?.call(details);
};

Crashlytics #

l.where((msg) => msg.level.maybeWhen(
      error: () => true,
      warning: () => true,
      orElse: () => false,
    ))
  .map<String>((msg) => msg.message.toString())
  .listen(FirebaseCrashlytics.instance.log);

Zoned Errors #

runZonedGuarded(someFunction, l.e);  

Handling uncaught errors #

Isolate.current
       ..setErrorsFatal(false)
       ..addErrorListener(
         RawReceivePort(
           (List<dynamic> pair) => // ignore: avoid_types_on_closure_parameters
               l.e(pair.first as Object),
         ).sendPort,
       );

Output example #


Limitations #

  • When there is no direct access to the terminal, it works through print.
  • !!! PLEASE, DO NOT LOG SENSITIVE INFORMATION !!!

Changelog #

Refer to the Changelog to get all release notes.


Maintainers #

Plague Fox


License #

WTFPL


Tags #

logger, log, logs, logging, logging-library, cross-platform, io, html

86
likes
125
pub points
91%
popularity

Publisher

verified publisherplugfox.dev

Cross-platform html/io Logger library with simple API. Manipulate with native and web console. Support ascii colorize output.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

WTFPL (license)

Dependencies

meta

More

Packages that depend on l