python logging模块的分文件存放详析
作者:hqx 发布时间:2023-04-02 20:27:32
标签: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
来源:https://blog.csdn.net/qq_17328759/article/details/125793689
0
投稿
猜你喜欢
- 滚动回归所谓滚动回归,通常用在时间序列上。记当前时刻为 t,回归时长为 s,则一直使用 当作自变量来预测 。使用滚动回归的目的通常是为了避免
- Python是跨平台的,免费开源的一门计算机编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不
- 大家好,我是小五前一阵给大家分享了,Python如何给图片加水印。评论区就有小伙伴问,可不可使用Python去除图片水印的方法呢?这个肯定有
- 有些时候(如开发聊天程序),我们需要将将滚动条(scrollbar)保持在最底部,比如聊天窗口,最新发出和收到的信息要显示在最下方,如果要看
- 前言Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反、if条件式和pandas.
- php统计数组元素个数count():对数组中的元素个数进行统计;sizeof():和count()具有同样的用途,这两个函数都可以返回数组
- 木马原理:入侵者使用诸如ASP图片木马生成器之类的工具将一张正常的图片与一个ASP木马文件合并成一个图片文件(即将对网站有害的ASP代码插在
- 1.单列运算在Pandas中,DataFrame的一列就是一个Series, 可以通过map来对一列进行操作:df['col2
- 前言:我们先定义一个test01.py的文件。test01.py中代码如下所示:def step():print(__name__) &nb
- pandas代码如下:import pandas as pdimport numpy as npsalaries = pd.DataFram
- 前言这部分已经折腾我两天了,还是没有头绪,可能还会折腾更久,最后在第三天上午解决问题,在一个不起眼的地方被坑了,jQuery加载的问题。会者
- 本文介绍了redis之django-redis的简单缓存使用,分享给大家,具体如下:自定义连接池这种方式跟普通py文件操作redis一样,代
- 本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能。缺点:1. 程序不是响
- 问题:例如我们要选从不同省份选取一个号码,每个省份的权重不一样,直接选随机数肯定是不行的了,就需要一个模型来解决这个问题。简化成下面的问题:
- win7 pycharm设置界面全黑色方法:1.设置默认PyCharm解析器: 操作如下:Python–>Preferences–&g
- 下面代码即是VBScript代码在服务器端编译后的显示内容,如果我们把这段代码保存成静态文件(HTML)或JS文件,那么上一篇提出的问题就迎
- 1. rangerange是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组
- 作者:JavaScript Kit译者:子乌(Sheneyan)翻译日期:2006-02-12英文原文:Conditional Compil
- 一、环境准备python3.6.7Pycharm二、创建项目我这里是在Django项目中新建了个APP,目录结构如下图所示:那么怎么在已有的
- 工作时常遇到需要在其它地方拷贝样式,比如Firebug之类的,但是复制出来的样式是带有换行和空格的,对于我这种有点洁癖的人来说,经常会一个个