在Ubuntu上配置Python日志主要有以下两种常用方式:
logging
模块通过配置文件或代码灵活控制日志级别、输出位置和格式,适合大多数场景。
直接在Python脚本中使用logging.basicConfig()
设置日志级别、格式和输出文件:
import logging logging.basicConfig( level=logging.INFO, # 日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL) format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式 filename='app.log', # 输出到文件(若需同时输出到控制台,需额外配置处理器) filemode='a' # 追加模式(默认) ) logging.info('这是一条普通信息') # 示例日志
说明:
level
控制日志显示级别,低于该级别的日志将被忽略。filename
指定日志文件路径,filemode
控制文件写入模式('w'
覆盖,'a'
追加)。通过logging.config
模块加载外部配置文件,支持多处理器(如同时输出到控制台和文件)、日志轮转等。
[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.info('通过配置文件记录日志') # 示例日志
说明:
[handlers]
配置多个处理器(如控制台、文件),通过[formatters]
定义不同格式。使用RotatingFileHandler
实现按大小分割日志文件:
from logging.handlers import RotatingFileHandler handler = RotatingFileHandler( 'app.log', maxBytes=10*1024*1024, # 单个文件最大10MB backupCount=5 # 保留5个备份文件 ) handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) logging.getLogger().addHandler(handler)
说明:
maxBytes
设置单个日志文件的最大大小,backupCount
设置保留的备份文件数量。logrotate
实现日志轮转适用于需要与系统日志管理工具集成的场景。
sudo apt update && sudo apt install logrotate
/path/to/python/*.log { daily # 每天轮转 rotate 7 # 保留7天日志 compress # 压缩旧日志 missingok # 忽略缺失文件 create 0640 root root # 创建新日志文件权限 postrotate # 可选:重启Python服务(需根据实际路径修改) # /bin/systemctl restart your-python-service endscript }
说明:
postrotate
可添加重启服务等操作。若需集中管理和可视化日志,可配置ELK(Elasticsearch+Logstash+Kibana):
# 安装Elasticsearch、Logstash、Kibana(参考官方文档)
/etc/logstash/conf.d/python.conf
中添加:input { file { path => "/path/to/python/*.log" start_position => "beginning" } } output { elasticsearch { hosts => ["localhost:9200"] index => "python-logs" } }
sudo systemctl start elasticsearch logstash kibana # 访问 http://localhost:5601 查看日志
说明:
logging.basicConfig()
或配置文件(logging.conf
),通过FileHandler
和StreamHandler
控制输出位置。logrotate
实现日志轮转,或通过ELK Stack实现集中式日志管理。