multi_logger 0.0.8
multi_logger: ^0.0.8 copied to clipboard
Dispatch logs to multiple sources like console or Sentry
multi_logger provides a unified way to log messages and events to multiple locations.
There are some loggers provided out of the box: ConsoleLogger and SentryLogger, but there
is also a flexible and easy-to-use interface to create your own loggers.
How to use #
Install #
To use multi_logger, simply add it to your pubspec.yaml file:
dart pub add multi_logger
Initialize #
logger = MultiLogger(
loggers: [
ConsoleLogger(
level: LogLevel.trace,
),
SentryLogger(
level: LogLevel.error,
),
]
);
It is also possible to use any logger separately. MultiLogger is just an another type of logger
implementing logging to multiple sources and sharing absolutely the same interface.
Use #
There are 5 levels and corresponding methods to use: trace, debug, info,
warning, error and fatal. All of them use the same set of parameters:
message: this might be anything, usually logger will usetoString()to get a string representationdateTime: optional date/time associated with the log event, current date/time will be used if not providederror: optional error associated with the log event, usually logger will usetoString()to get a string representationstackTrace: optional log event stack trace, current stack trace will be used if not providedextra: an arbitrary extra data associated with the log event
logger.info('This is an informational message');
try {
throw ...;
} catch (error, stackTrace) {
logger.error(
'An error happened',
error: error,
stackTrace: stackTrace,
);
}
If you want to filter log events or modify them it's possible to provide a beforeLog callback
and return a modified event or null to drop an event completely.
ConsoleLogger(
beforeLog: (event) {
// Drop all events with extra data
return (event.extra != null) ? null : event;
},
),
Also you can subscribe to log events and their respective outputs from each logger using
the provided events stream:
consoleLogger.events.listen((data) {
final (event, output) = data;
...
}
Built-in loggers #
There are two built-in loggers provided:
ConsoleLogger: logs messages to console with colorized output based on levels, stack traces for errors and logging of extra associated with eventsSentryLogger: logs messages and errors to Sentry
Note: in order to use SentryLogger Sentry needs to be already initialized.
Custom loggers #
You can create you own logger by simply extending Logger class and implementing a single method:
class MyLogger extends Logger {
MyLogger({super.level});
@override
Future<dynamic> logEvent(LogEvent event) async {
// Your implementation goes here
}
}