Logger
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}'));
Print handling and customizing
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
License
Tags
logger, log, logs, logging, logging-library, cross-platform, io, html