这篇文章主要介绍“python logging模块怎么分文件存放”,在日常操作中,相信很多人在python logging模块怎么分文件存放问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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模块怎么分文件存放”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。