Python 日志 TimedRotatingFileHandler

2023-10-27

Python日志TimedRotatingFileHandler通常不是我们需求的,所以进行了一些重写

class MyTimedRotatingFileHandler(TimedRotatingFileHandler):
    """
    时间为切割点日志
    """
    def getFilesToDelete(self):
        """
        Determine the files to delete when rolling over.

        More specific than the earlier method, which just used glob.glob().
        """
        dirName, baseName = os.path.split(self.baseFilename)
        fileNames = os.listdir(dirName)
        result = []
        # prefix = baseName + "."
        # plen = len(prefix)
        for fileName in fileNames:
            # if fileName[:plen] == prefix:
            # suffix = fileName[:-4]
            if self.extMatch.match(fileName):
                 result.append(os.path.join(dirName, fileName))
        if len(result) < self.backupCount:
            result = []
        else:
            result.sort()
            result = result[:len(result) - self.backupCount]
        return result


def split_file_name(filename):
    """
    修改日志文件名称
    """
    file_path = filename.split('default.log.')
    # return f"flask_{''.join(file_path)}"
    return ''.join(file_path)


def setup_log(log_name):
    # 创建logger对象,log_name: 日志名字
    logger_obj = logging.getLogger(log_name)
    # log文件夹路径
    logger_folder_path = Path(__file__).parent / 'logs'
    # 创建log文件夹
    logger_folder_path.mkdir(exist_ok=True)
    # loge文件路径
    log_file_path = logger_folder_path / 'default.log'

    # when="MIDNIGHT", interval=1,表示每天0点为更新点,每天生成一个文件
    logger_handler = MyTimedRotatingFileHandler(filename=log_file_path, when='S', interval=1, backupCount=5,
                                                encoding='utf-8')
    # 处理日志文件名称
    logger_handler.namer = split_file_name

    # 修改后缀suffix,生成.log文件
    # extMatch是编译好正则表达式,用于匹配日志文件名后缀
    # 需要注意的是suffix和extMatch一定要匹配的上,如果不匹配,过期日志不会被删除
    logger_handler.suffix = f"{logger_handler.suffix}.log"
    # when=S: r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(.log)$"
    # when=M: r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}(.log)$"
    # when=H: r"^\d{4}-\d{2}-\d{2}_\d{2}(.log)$"
    # when=D or MIDNIGHT : r"^\d{4}-\d{2}-\d{2}(.log)$"
    # when=W: r"^\d{4}-\d{2}-\d{2}(.log)$"
    logger_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(.log)$", re.ASCII)

    # 创建日志输出格式
    logger_formatter = logging.Formatter(
        "[%(asctime)s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s (%(filename)s:%(lineno)d) - %(message)s")

    # 配置日志输出格式
    logger_handler.setFormatter(logger_formatter)

    # 增加日志处理器
    logger_obj.addHandler(logger_handler)

    # 设置日志的记录等级,常见等级有: DEBUG<INFO<WARING<ERROR
    logger_obj.setLevel(logging.INFO)

    return logger_obj


if __name__ == "__main__":
    logger = setup_log("llz_log")
    n = 1
    while True:
        logger.info(f"this is info message")
        time.sleep(1)
        logger.warning(f"this is a warning message")
        n += 1

效果如图

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 日志 TimedRotatingFileHandler 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 历时130天784分通过了HCIE笔试

    这是自己送给自己2023年最好的礼物 从学习到备考笔试经历了130天 对我来说每天都是背负着一个沉重的包袱前行 活的很累很累 期间不被人理解 学到崩溃 并且放弃了n次又爬起来 不得不说这些我都熬过来了 其实感觉一张成绩单就能检验一个人的能力
  • kinect fusion+opencv程序

    define CRT SECURE NO WARNINGS include pch h This file is part of OpenCV project It is subject to the license terms in th
  • C++:实现socket通信(TCP/IP)实例

    首先声明 博主之前从来没有写过通信方面的东西 这次之所以写这个是因为项目需要 因此本文主要介绍一个使用C 语言及Socket来实现TCP IP通信的实例 希望可以帮助入门者 本教程 属于基础教程 针对入门者 如需更深入的功能 自行扩展 IP
  • 【数据结构】图的创建与遍历

    图 Graph 是由顶点的有穷非空集合和顶点之间边的集合组成 通常表示为 G V E 其中 G表示一个图 V是图G中顶点的集合 E是图G中边的集合 线性表 线性关系 由直接前驱和直接后继组成 树 层次关系 由父结点和孩子结点组成 每个结点最
  • 访问XP共享出现的问题解决办法

    好多xp系统启用了guest也无法网络访问 故障解决如下 启用了guest为什么仍然不能访问 1 默认情况下 xp 禁用guest帐户 2 默认情况下 xp的本地安全策略禁止guest用户从网络访问 3 默认情况下 xp的本地安全策略 用户
  • redisson分布式锁

    RLock官网解释 基于Redis的Java分布式可重入锁对象 实现了锁接口 如果获得锁的Redisson实例崩溃 那么这种锁可能永远挂起在获得状态 为了避免这种情况 Redisson维护了锁看门狗 它在锁持有者Redisson实例活着的时
  • CKEditor去掉默认的

    的处理

    CKEditor在使用的时候 编辑框中总是默认带有P元素 如何去掉呢 请看下面 1 在ckeditor里的config js中添加 config enterMode 1 回车的时候增加的是p config enterMode 2 回车的时候
  • 毕业设计-基于深度学习的作物长势监测和产量估测研究

    目录 前言 课题背景和意义 实现技术思路 一 区域尺度的作物长势监测和产量估测研究进展 二 田块尺度的作物长势监测和产量估测研究进展 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准
  • CMAKE——message()函数

    message 为用户显示一条消息 message STATUS WARNING AUTHOR WARNING FATAL ERROR SEND ERROR message to display 可以用下述可选的关键字指定消息的类型 无 重
  • keil编译后报错Error:L6218E的解决方法汇总

    一 检查有没有添加头文件或者源文件 1 头文件 添加 举例子 Error L6218E Undefined symbol MX SPI1 Init referred from w25q64 o 中MX SPI1 Init函数所在头文件 或者
  • react - 条件渲染,列表渲染,表单绑定,状态提升

    九 条件渲染 在 React 中 你可以创建不同的组件来封装各种你需要的行为 然后还可以根据应用的状态变化只渲染其中的一部分 React 中的条件渲染和 JavaScript 中的一致 使用 JavaScript 操作符 if 或条件运算符
  • Leetcode 1523 在区间范围内统计奇数数目

    Leetcode 1523 在区间范围内统计奇数数目 题目描述 给你两个非负整数 low 和 high 请你返回 low 和 high 之间 包括二者 奇数的数目 示例 1 输入 low 3 high 7 输出 3 解释 3 到 7 之间奇
  • android刷机恢复出厂设置吗,安卓手机恢复出厂设置和双清有什么区别?

    1 恢复出厂设置是 把手机恢复到你刚买到手时候的状态 手机里的软件设置等都恢复到出厂时候的 后来设置都取消 但是内存卡里的东西还在 2 双清指的是 清理手机内的用户数据和储存里的东西 可以有效的提高手机的运行速度 手机双清是进入手机的rec
  • Mac删除虚拟声卡

    打开Mac的文件管理器 到目录 Library Audio Plug Ins HAL 下直接删除想要的声卡文件夹即可 一般文件夹的结尾是 driver结尾的 重启系统
  • 新书上市

    2020年12月30日晚上 曹则贤老师在中科院跨年科学晚会上带来了 广义相对论 主题演讲 并且在开头部分就甩出了一个相对论书单 都是在这个领域有过基础贡献的大师著作 其中的一本 广义相对论 格外清奇 它只有64页 曹老师对这本书也是赞不绝口
  • MarkDown创建表格

    凑微分方法 1 csc 2 xdx d cotx 2 secxtanxdx d secx 3 cscxcotxdx d cscx 4 dfrac 1 1 x 2 dx d arctanx d arccotx 5 dfrac 1 sqrt 1
  • el-table动态添加行,列。自定义输入表头,input hover 显示文字

    功能点 1 动态添加行 2 动态添加列 3 右键表头删除列 4 右键表体删除行 5 表格hover提示当前单元格文字 自动换行 6 表头文字自定义 7 表头 添加按钮固定 表体自适应滚动 效果图 代码 复制即可运行
  • web前端开发学习路径图

    第一阶段 WEB前端工程师课程 HTML语句 HTML页面结构 css语法 style属性 link和style标签 id属性 等HTML语句中的相关属性 通过Dreamweaver制作出跨越平台限制和跨越浏览器兼容性的页面 掌握Dream
  • 记录一次脱壳后修复apk

    前言 好不容易会脱壳 但是却仅仅只能得到dex文件 无法动态调试apk 这样还是不行 因此我们需要对源apk进行修复 准备 首先我这里是脱了一个爱加密的壳得到dump dex使用jadx gui可以正常打开 说明脱壳成功了 接下来就是将du
  • Python 日志 TimedRotatingFileHandler

    Python日志TimedRotatingFileHandler通常不是我们需求的 所以进行了一些重写 class MyTimedRotatingFileHandler TimedRotatingFileHandler 时间为切割点日志 d