Для многоканального логирования в Python:
logging.getLogger('название_модуля') для каждого модуля/компонента.logging.StreamHandler (консоль), logging.FileHandler (файл), logging.RotatingFileHandler (ротация файлов) и другие.  Можно настроить разные форматтеры (Formatter) для каждого Handler.propagate=False, чтобы избежать дублирования сообщений от корневого логгера, если это необходимо.Пример:
import logging
# Логгер для API
api_logger = logging.getLogger('api')
api_logger.setLevel(logging.DEBUG)
api_handler = logging.StreamHandler() # Вывод в консоль
api_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
api_logger.addHandler(api_handler)
# Логгер для базы данных
db_logger = logging.getLogger('db')
db_logger.setLevel(logging.WARNING)
db_file_handler = logging.FileHandler('db.log') # Запись в файл
db_file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
db_logger.addHandler(db_file_handler)
# Использование логгеров
api_logger.debug('Запрос получен')
db_logger.warning('Ошибка подключения к БД')
  Многоканальное логирование в Python с использованием разных логгеров для различных частей приложения позволяет гибко управлять тем, как собираются и обрабатываются логи. Вот подробное описание настройки:
1. Импорт необходимых модулей:
import logging
import logging.config2. Определение конфигурации логирования (обычно в файле logging.conf или logging.yaml):
Можно использовать файл конфигурации для централизованного управления логированием. Рассмотрим пример в YAML формате:
version: 1
formatters:
  simple:
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout
  file_app1:
    class: logging.FileHandler
    level: INFO
    formatter: simple
    filename: app1.log
  file_app2:
    class: logging.FileHandler
    level: WARNING
    formatter: simple
    filename: app2.log
loggers:
  app1:
    level: INFO
    handlers: [console, file_app1]
    propagate: no  # Предотвратить передачу логов в корневой логгер
  app2:
    level: WARNING
    handlers: [file_app2]
    propagate: no
root:
    level: DEBUG
    handlers: [console] #Пример корневого логгера, который пишет все в консоль
3. Загрузка конфигурации логирования:
Используйте `logging.config.dictConfig()` (если конфигурация представлена в виде словаря Python) или `logging.config.fileConfig()` (если конфигурация хранится в файле .ini) или `logging.config.dictConfig(yaml.safe_load(open('logging.yaml')))` (если используется YAML)
import yaml
with open('logging.yaml', 'r') as f:
    config = yaml.safe_load(f)
logging.config.dictConfig(config)
4. Получение логгеров в разных частях приложения:
logger_app1 = logging.getLogger('app1')
logger_app2 = logging.getLogger('app2')
def some_function_in_app1():
    logger_app1.info('This is an informational message from app1.')
def some_function_in_app2():
    logger_app2.warning('This is a warning message from app2.')
5. Использование логгеров:
Теперь можно использовать полученные логгеры для записи сообщений в соответствующих частях приложения:
some_function_in_app1()
some_function_in_app2()
Объяснение ключевых моментов:
Преимущества такого подхода:
Дополнительные советы: