温馨提示×

Ubuntu如何配置Python的日志系统

小樊
61
2025-08-21 18:00:24
栏目: 编程语言

在Ubuntu上配置Python日志系统主要有以下两种方式:

一、使用Python内置logging模块

1. 基础配置(推荐)

通过logging.basicConfig()快速配置,适合简单场景:

import logging

logging.basicConfig(
    level=logging.INFO,  # 日志级别
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 日志格式
    filename='app.log',  # 日志文件路径
    filemode='a'  # 追加模式
)

logger = logging.getLogger(__name__)
logger.info('这是一条普通信息')  # 记录日志

2. 配置文件方式(灵活)

通过INI格式配置文件(如logging.conf)实现复杂需求:

  • 创建配置文件(示例):
    [loggers]
    keys=root
    
    [handlers]
    keys=consoleHandler,fileHandler
    
    [formatters]
    keys=simpleFormatter
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler,fileHandler
    
    [handler_consoleHandler]
    class=StreamHandler
    level=DEBUG
    formatter=simpleFormatter
    args=(sys.stdout,)
    
    [handler_fileHandler]
    class=FileHandler
    level=DEBUG
    formatter=simpleFormatter
    args=('app.log', 'a')
    
    [formatter_simpleFormatter]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
    datefmt=%Y-%m-%d %H:%M:%S
    
  • 加载配置
    import logging.config
    
    logging.config.fileConfig('logging.conf')
    logger = logging.getLogger(__name__)
    logger.debug('调试信息')  # 会同时输出到控制台和文件
    

3. 多处理器配置

可同时输出到控制台和文件,且设置不同日志级别:

import logging

# 创建日志记录器
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter('%(levelname)s - %(message)s')
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)

# 文件处理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)

logger.info('信息会同时输出到控制台和文件')
logger.debug('仅输出到文件')

二、结合系统工具管理日志

1. 使用logrotate轮转日志

避免日志文件过大,安装并配置logrotate

sudo apt update
sudo apt install logrotate
  • 创建配置文件(如/etc/logrotate.d/python_app):
    /var/log/python_app/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 0640 root root
        postrotate
            # 可选:重启服务(需根据实际服务调整)
            # /bin/kill -HUP $(cat /var/run/python_app.pid 2>/dev/null) 2>/dev/null || true
        endscript
    }
    
  • 手动测试
    sudo logrotate -vf /etc/logrotate.d/python_app
    

三、进阶方案(ELK Stack)

适合大规模日志分析,需安装Elasticsearch、Logstash、Kibana,配置略复杂,可参考官方文档。

注意事项

  • 配置文件路径需根据实际项目调整,建议放在项目根目录或/etc下。
  • 生产环境中建议使用fileConfigdictConfig,避免硬编码日志路径和级别。
  • 若需记录中文,需在文件处理器中指定encoding='utf-8'

以上配置可根据项目需求选择,基础场景推荐basicConfig,复杂场景优先使用配置文件方式。

0