channels property
Map<String, List<LogHandler> >
get
channels
Gets the configured log channels and their handlers.
Implementation
Map<String, List<LogHandler>> get channels {
final channels = <String, List<LogHandler>>{};
// Try new channels configuration first
final channelsConfig =
_config.get<Map<String, dynamic>>('logging.channels');
if (channelsConfig != null) {
// First pass: create non-stack handlers
for (final entry in channelsConfig.entries) {
final name = entry.key;
final config = entry.value as Map<String, dynamic>;
final driver = config['driver'] as String?;
if (driver != 'stack') {
final handler = _createHandler(driver, config);
if (handler != null) {
channels[name] = [handler];
}
}
}
// Second pass: create stack handlers
for (final entry in channelsConfig.entries) {
final name = entry.key;
final config = entry.value as Map<String, dynamic>;
final driver = config['driver'] as String?;
if (driver == 'stack') {
final includedChannels = (config['channels'] as List).cast<String>();
final handlers = <LogHandler>[];
for (final includedName in includedChannels) {
if (channels.containsKey(includedName)) {
handlers.addAll(channels[includedName]!);
}
}
channels[name] = handlers;
}
}
} else {
// Fallback to legacy handlers configuration
final handlersConfig =
_config.get<Map<String, dynamic>>('logging.handlers', {});
if (handlersConfig != null) {
// Configure file handler
final fileConfig = handlersConfig['file'] as Map<String, dynamic>?;
if (fileConfig != null && fileConfig['enabled'] == true) {
channels['file'] = [_createFileHandler(fileConfig)];
}
// Configure console handler
final consoleConfig =
handlersConfig['console'] as Map<String, dynamic>?;
if (consoleConfig != null && consoleConfig['enabled'] == true) {
channels['console'] = [_createConsoleHandler(consoleConfig)];
}
// For legacy config, 'app' channel includes all enabled handlers
channels['app'] = [
...?channels['file'],
...?channels['console'],
];
}
}
return channels;
}