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