Python内置的logging模块是日志管理的核心工具,支持分级记录(DEBUG/INFO/WARNING/ERROR/CRITICAL)、多目的地输出(控制台/文件/系统日志)和格式自定义。以下是基础配置示例:
import logging
# 基础配置(快速设置)
logging.basicConfig(
level=logging.INFO, # 设置日志级别(低于此级别的日志不会记录)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # 日志格式(时间、模块名、级别、消息)
filename='app.log', # 日志文件路径(默认当前目录)
filemode='a' # 文件模式('a'追加,'w'覆盖)
)
# 记录日志
logging.debug('调试信息') # 不会记录(级别低于INFO)
logging.info('程序正常运行') # 会记录
logging.error('发生错误!') # 会记录
关键说明:
DEBUG→INFO→WARNING→ERROR→CRITICAL,设置level后可过滤低级别日志。filename指定日志文件路径,若未指定则输出到控制台(通过StreamHandler)。Python日志文件的位置取决于代码配置,常见场景如下:
app.log(当前目录)或/var/log/myapp/app.log(绝对路径)。settings.py(LOGGING字典)、Flask的config.py(LOGGER_NAME),需查找LOG_FILE、LOG_PATH等参数。SysLogHandler(address='/dev/log'),日志会写入系统日志(如/var/log/syslog或/var/log/messages)。logs/文件夹。直接查看日志文件:
使用cat、less或tail命令查看日志内容:
cat /var/log/myapp/app.log # 查看完整日志
tail -f /var/log/myapp/app.log # 实时查看日志末尾(新增内容动态刷新)
grep "ERROR" /var/log/myapp/app.log # 过滤错误日志
使用journalctl查看系统日志:
若Python日志写入系统日志(如通过SysLogHandler),可通过journalctl命令查看:
sudo journalctl -u your_app_service_name # 查看指定服务的日志(需替换为实际服务名)
sudo journalctl -u your_app_service_name | grep "Python" # 过滤Python相关日志
sudo journalctl -f # 实时查看系统日志变化
第三方工具:
日志轮转可自动分割、压缩旧日志,避免单个文件过大。常用方法有两种:
RotatingFileHandler或TimedRotatingFileHandler按大小轮转(RotatingFileHandler):当日志文件达到指定大小时,创建新文件并保留指定数量的旧文件。
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
'/var/log/myapp/app.log', # 日志文件路径
maxBytes=10*1024*1024, # 单个文件最大大小(10MB)
backupCount=5 # 保留的旧文件数量
)
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logging.getLogger().addHandler(handler)
按时长轮转(TimedRotatingFileHandler):按天/小时/周等周期轮转日志。
from logging.handlers import TimedRotatingFileHandler
handler = TimedRotatingFileHandler(
'/var/log/myapp/timed_app.log', # 日志文件路径
when='midnight', # 轮转时间(每天午夜)
interval=1, # 轮转间隔(1天)
backupCount=7 # 保留的旧文件数量(7天)
)
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logging.getLogger().addHandler(handler)
logrotate工具logrotate是CentOS自带的日志管理工具,可配置定时任务自动轮转日志。
/etc/logrotate.d/myapp):/var/log/myapp/*.log { # 匹配日志文件路径(支持通配符)
daily # 每天轮转
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(如.gz格式)
missingok # 若日志文件不存在也不报错
notifempty # 若日志为空则不轮转
create 640 root adm # 创建新日志时的权限和所有者
}
sudo logrotate -vf /etc/logrotate.d/myapp # 强制轮转并显示详细信息
注意:若日志文件路径为/var/log/myapp/app.log,需确保运行Python应用的用户(如root或应用用户)对该目录有写入权限(chmod 755 /var/log/myapp)。
若需要将Python日志与系统日志统一管理,可使用SysLogHandler:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger('myapp')
logger.setLevel(logging.INFO)
# 配置SysLogHandler(本地系统日志)
handler = SysLogHandler(address='/dev/log') # CentOS系统日志路径
handler.setFormatter(logging.Formatter('myapp[%(process)d]: %(levelname)s - %(message)s'))
logger.addHandler(handler)
# 记录日志(会写入/var/log/syslog)
logger.info('This is a system log message')
说明:
address='/dev/log'表示连接到本地系统日志服务(syslog)。/var/log/syslog(CentOS 7之前)或/var/log/messages(CentOS 7及之后)中,可通过grep "myapp" /var/log/syslog过滤。通过以上步骤,可实现CentOS下Python日志的有效查看(实时/历史)、管理(轮转/权限)和扩展(系统日志/ELK分析),满足不同场景的需求。