在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实现集中式日志管理。