在 python 中创建和处理 .log 文件,推荐使用内置的 logging 模块。以下是完整的实现方案:
基础版:创建单个日志文件
import logging
# 基本配置
logging.basicconfig(
filename='application.log', # 日志文件名
level=logging.debug, # 记录级别(debug及以上都会记录)
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 使用日志
logging.debug('这是一条调试信息')
logging.info('程序正常启动')
logging.warning('磁盘空间不足50%')
logging.error('数据库连接失败')
进阶版:日志分时分割 (按日期)
from logging.handlers import timedrotatingfilehandler
import logging
logger = logging.getlogger(__name__)
logger.setlevel(logging.info)
# 创建按天分割的日志处理器
handler = timedrotatingfilehandler(
'daily_log.log',
when='midnight', # 每天午夜分割
interval=1,
backupcount=7 # 保留最近7天的日志
)
formatter = logging.formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setformatter(formatter)
logger.addhandler(handler)
# 使用日志
logger.info("这条日志会按天自动分割")
专业版:多类型日志处理器组合
import logging
from logging.handlers import rotatingfilehandler
# 创建不同处理器
debug_handler = rotatingfilehandler(
'debug.log',
maxbytes=1024*1024, # 1mb
backupcount=3
)
debug_handler.setlevel(logging.debug)
error_handler = rotatingfilehandler(
'errors.log',
maxbytes=1024*1024,
backupcount=1
)
error_handler.setlevel(logging.error)
# 创建带颜色的控制台输出
console = logging.streamhandler()
console.setlevel(logging.info)
# 创建格式器
formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
debug_handler.setformatter(formatter)
error_handler.setformatter(formatter)
console.setformatter(logging.formatter('%(levelname)s: %(message)s'))
# 配置根日志器
root_logger = logging.getlogger()
root_logger.setlevel(logging.debug)
root_logger.addhandler(debug_handler)
root_logger.addhandler(error_handler)
root_logger.addhandler(console)
# 测试日志
logging.debug("开发调试信息")
logging.info("用户登录成功")
logging.warning("接口响应时间过长")
logging.error("支付服务连接超时")
关键功能说明
| 功能 | 实现方式 |
|---|---|
| 文件创建 | logging.basicconfig(filename='...') |
| 日志级别 | debug < info < warning < error < critical |
| 大小切割 | rotatingfilehandler |
| 日期切割 | timedrotatingfilehandler |
| 格式定制 | logging.formatter() 支持日期、进程信息等 |
| 多输出目标 | 添加多个处理器到日志器 |
高级功能
结构化日志 (适合json格式)
import json
from logging import formatter
class jsonformatter(formatter):
def format(self, record):
log_record = {
'time': self.formattime(record),
'level': record.levelname,
'message': record.getmessage(),
'module': record.module
}
return json.dumps(log_record)
formatter = jsonformatter()
日志过滤
class nodebugfilter(logging.filter):
def filter(self, record):
return record.levelno < logging.debug
debug_handler.addfilter(nodebugfilter())
日志管理最佳实践
目录结构
project/ ├── logs/ │ ├── debug.log │ ├── info.log │ └── errors.log └── main.py
推荐配置
import os
from pathlib import path
# 创建日志目录
log_dir = path('logs')
log_dir.mkdir(exist_ok=true)
# 主日志配置
logging.basicconfig(
level=logging.info,
handlers=[
rotatingfilehandler(log_dir/'app.log', maxbytes=10*1024*1024, backupcount=5),
logging.streamhandler()
],
format='[%(asctime)s] %(levelname)s in %(module)s: %(message)s'
)
环境区分
if os.getenv('flask_env') == 'development':
logging.getlogger().setlevel(logging.debug)
else:
logging.getlogger().setlevel(logging.warning)
使用这些方法,您可以创建专业级的日志系统,满足从简单记录到企业级应用的各种需求。
以上就是python使用logging模块创建和处理.log文件的多种方法的详细内容,更多关于python logging创建和处理.log文件的资料请关注代码网其它相关文章!
发表评论