每日快看:python logging模块的分文件存放详析
前言:
如果使用进到的日志文件方法:logging.FileHandler,会导致日志信息全部存放在一个日志文件中,不利于后面对日志文件的使用。
下面分享常见的两种分文件存储日志的方法。delay = True参数避免了出现多进程中读取日志权限的问题
(资料图片)
TimedRotatingFileHandler 根据时间创建日志文件
TimedRotatingFileHandler(filename, when="h", interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
atTime 与 when参数之间的关系
RotatingFileHander 根据日志文件大小创建日志文件
RotatingFileHandler(filename, mode="a', maxBytes=0, backupCount=0, encoding=None, delay=False)
分文件时,PermissionError异常处理
异常信息:
--- Logging error --- Traceback (most recent call last): "省略部分信息" PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
解决方法:
设置 delay=True使用第三方库 concurrent_log_handler.ConcurrentRotatingFileHandler
代码实现:customer_log.py
import logging
from logging import handlers
from concurrent_log_handler import ConcurrentRotatingFileHandler
def set_basic_logger():
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
log_path = path + "/Log/"
log_file = log_path + "mockSystem.log"
err_file = log_path + "mockSystemErr.log"
# 定制输出格式
formatter = logging.Formatter(
"[%(asctime)s] %(filename)s -> %(funcName)s line:%(lineno)d [%(levelname)s] : %(message)s")
# # 所有日志在一个文件中存储
# handler = logging.FileHandler(log_file, encoding="utf-8", mode="a+")
# 按天分文件存储,保存最近30天的日志
handler = handlers.TimedRotatingFileHandler(log_file, when="d", interval=1, backupCount=30, encoding="utf-8", delay=True)
# 按文件大小分文件存储,每个文件10字节,保留10个文件
# handler = handlers.RotatingFileHandler(log_file, maxBytes=10, backupCount=10,
# encoding="utf-8", delay=True)
# 按文件大小分文件存储,每个文件10字节,保留10个文件
# handler = ConcurrentRotatingFileHandler(log_file, maxBytes=10, backupCount=10)
handler.setLevel(logging.INFO)
handler.setFormatter(formatter)
# err_handler = ConcurrentRotatingFileHandler(err_file, encoding="utf-8", mode="a+") # 输出到err_log文件
err_handler = handlers.TimedRotatingFileHandler(err_file, when="d", interval=1, backupCount=30,
encoding="utf-8", delay=True)
# err_handler = handlers.RotatingFileHandler(err_file, maxBytes=10, backupCount=10,
# encoding="utf-8", delay=True)
# err_handler = ConcurrentRotatingFileHandler(err_file, maxBytes=10, backupCount=10)
err_handler.setLevel(logging.WARNING)
err_handler.setFormatter(formatter)
logging.basicConfig(
level=logging.DEBUG,
format="[%(asctime)s] %(filename)s -> %(funcName)s line:%(lineno)d [%(levelname)s] : %(message)s",
handlers=[handler, err_handler]
)在项目主程序中使用时:main.py
from customer_log imoprt set_basic_logger import mu set_basic_logger() mu.show_cur_info()
在项目其他模块使用时:mu.py
import logging def show_cur_info(): msg = "dddddd" print(msg) logging.info(msg
到此这篇关于python logging模块的分文件存放详析的文章就介绍到这了,更多相关python logging模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 2充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 3好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 4名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 5亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 6京东绿色建材线上平台上线 新增用户70%来自下沉市场
- 7网红淘品牌“七格格”chuu在北京又开一家店 潮人新宠chuu能红多久
- 8市场竞争加剧,有车企因经营不善出现破产、退网、退市
- 9北京市市场监管局为企业纾困减负保护经济韧性
- 10市场监管总局发布限制商品过度包装标准和第1号修改单

