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;
}