Python-日志模块

news2024/11/29 0:38:32

目录

一、日志级别

二、日志配置

1、日志基本配置

2、日志配置字典(知道咋么改就可以)

3、日志的使用


一、日志级别

import logging

logging.debug('调试日志')
logging.info('消息日志')
logging.warning('警告日志')
logging.error('错误日志')
logging.critical('严重错误日志')

注:info 级别一下的日志不用输出,只打印Warning级别以上的日志(可以更改);

二、日志配置

1、日志基本配置

# 日志基本配置
logging.basicConfig(  # 默认编码方式gbk
    # 1、日志级别
    level=30,  # 用来控制输出级别,30对应的是warning
    # DEBUG:10
    # INFO:20
    # WARNING:30
    # ERROR:40
    # CRITICAL:50

    # 2、日志输出格式
    format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',

    # %(asctime)s 获取当前时间,
    # % (name)s 当前日志的名字
    # %(pathname)s 指的是哪一个文件产生的日志
    # %(lineno)d 指的是文件的哪一行代码产生的日志
    # %(levelname)s 指的是文本形式的日志等级

    # 3、asctime的时间格式
     datefmt='%Y %m %d %H:%M:%S',
    # 4、日志输出位置:终端/文件
     filename='user.log', # 不指定此配置,默认打印到终端
)

'''
%(name)s Logger的名字(getlogger时指定的名字)
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出日志的完整路径名
%(filename)s 调用日志输出日志的文件名
%(module)s 调用日志输出日志的模块名
%(funcName)s 调用日志输出日志的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是 “2022 07 30 22:15:53,394”
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的消息
'''
'''
logging模块有三个比较重要的功能组件:
1、loggers 配置文件可定义一些输出日志的appname
2、handler 配置日志的分隔大小,输出位置,日志文件创建等
3、formatters 配置日志输出的格式
'''

2、日志配置字典(知道咋么改就可以)

(1)需要将字典放在项目的settings.py里面;(图片中Ctrl+Shift +-号缩放)

(2)解读

LOGGING_DIC = {
    'version': 1.0,  # 版本,根据个人修改
    'disable existing loggers': False,
    # 日志格式,格斯根据需求,自己更改或者命名
    'formatters': {
        'standard': {
            'format': '%(asctime)s %(threadName)s:%(thread)d [%(name)s] %(levelname)s [%(pathname)s:%(lineno)d] %(message)s',
            'datefmt': '%Y %m %d %H:%M:%S',
        },
        'simple': {
            'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s', 'datefmt': '%Y %m %d %H:%M:%S',
        },
        'test': {
            'format': '%(asctime)s %(message)s',
        },
    },
    'filters': {},  # 过滤器
    # 日志处理器
    'handlers': {
        'console WARNING handler': {
            'level': 'WARNING',  # 日志处理的级别限制
            'class': 'logging.StreamHandler',  # 输出到终端
            'formatter': 'simple'  # 日志格式
        },
        'file info handler': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
            'filename': 'user.log',
            'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
            'encoding': 'utf 8',
            'formatter': 'standard',
        },  # 保存到文件
        'file debug handler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'filename': 'test.log',  # 日志存放的路径
            'encoding': 'utf 8',  # 日志文件的编码
            'formatter': 'test',
        },
        'file info_standard handler': {
            'level': 'INFO',  # 日志处理的级别限制
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'zx.log',
            'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
            'encoding': 'utf 8',
            'formatter': 'standard'  # 日志格式
        },
        '': {
            'level': 'INFO',  # 日志处理的级别限制
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'zx.log',
            'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
            'encoding': 'utf 8',
            'formatter': 'standard'  # 日志格式
        }, # 在主文件中调用setting中没有配置的handler,就会调用没有名字的
    },
    # 日志记录器
    'loggers': {
        'logger1': {  # 导入时logging.getLogger时使用的app name
            'handlers': ['console WARNING handler'],  # 日志分配到哪个handlers中
            'level': 'DEBUG',  # 日志记录的级别限制
            'propagate': False,
            # 默认为True,向上(更高级别的logger)传递,设置为False即可,否则会一份日志向上层层传递
        },
        'logger2': {
            'handlers': ['console WARNING handler', 'file debug handler'],
            'level': 'INFO',
            'propagate': False,
        },
        'logger3': {
            'handlers': ['file info_standard handler', 'file debug handler'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}
# 注:进行日志轮转的日志文件,不能和其他handler共用,不然会导致文件被占用无法更名而报错!
# logger 负责产生不同级别的日志,然后将日志传给handler,handler将logger产生的日志进行处理

3、日志的使用

import settings
import logging.config  # 可以导入logging

logging.config.dictConfig(settings.LOGGING_DIC) # 将配置字典加载进来

# logger1 = logging.getLogger('logger1')
# logger1.info('xxx登录了')
logger2 = logging.getLogger('logger2')
logger2.warning('xxx充值了5毛钱')

(1)可以根据 日志记录器Logger 和 日志处理器Handler 的level参数对日志进行分类;

比如:

   

(2)没有名字的'handler',运用在主文件中调用setting中没有配置的handler,就会调用没有名字的;

例:

'': {
    'level': 'INFO',  # 日志处理的级别限制
    'class': 'logging.handlers.RotatingFileHandler',
    'filename': 'zx.log',
    'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M'backupCount': 10, # 日志文件保存数量限制
    'encoding': 'utf 8',
    'formatter': 'standard'  # 日志格式
}, 

(3)日志的轮转,就是日志的大小超过一定大小,就重新命名;

'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
'filename': 'user.log',
'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M
'backupCount': 10,  # 日志文件保存数量限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg音视频开发从入门到精通——ffmpeg 视频数据抽取

文章目录 FFmpeg视频处理工具使用总结环境配置主函数与参数处理打开输入文件获取流信息分配输出文件上下文猜测输出文件格式创建视频流并设置参数打开输出文件并写入头信息读取、转换并写入帧数据写入尾信息并释放资源运行程序注意事项源代码 FFmpeg视频处理工具使用总结 环境…

如何获取文件对应的路径

有时我们会把脚本文件复制到其他的路径或者电脑文件夹下,如果采用绝对路径的话,会发生找不到改文件,程序就会报错。那么我们如何避免这个问题呢?我们可以采用相对路径的方法。 可以看到,系统的当前路径"D:\python…

什么是距离选通型水下三维激光扫描仪?(下)

距离选通激光水下成像的发展 距离选通激光成像技术始于上世纪60年代,受制于高性能脉冲激光器和选通成像器件发展的制约,激光距离选通成像技术在随后的二十年发展缓慢,直到20世纪90年代,随着硬件技术的不断成熟,该技术…

VBA:demo大全

VBA常用小代码合集,总有一个是您用得上的~ (qq.com) 如何在各个分表创建返回总表的命令按钮? 今天再来给大家聊一下如何使用VBA代码,只需一键,即可在各个分表生成返回总表的按钮。 示例代码如下: Sub Mybutton()Dim …

房市复兴?新增贷款暴跌九成,房市接盘侠悠着点!

就在各方都认为在诸多利好政策支持下,房市正在复兴,一些分析数据似乎也显示出好转迹象,然而相比起这些数据,新增贷款或许更能证明房市的处境,比其他指标更具说服力。 5月份的数据显示,中国的新增贷款仅514亿…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces论文笔记

文章目录 Mamba: Linear-Time Sequence Modeling with Selective State Spaces摘要引言 相关工作(SSMs)离散化计算线性时间不变性(LTI)结构和尺寸一般状态空间模型SSMs架构S4(补充)离散数据的连续化: 基于零阶保持技术做连续化并采样循环结构表示: 方便快速推理卷积结构表示: 方…

海报设计师的福音来了,微软联合清华北大提出Glyph-ByT5-v2,可支持多国语言图文海报生成,效果惊艳!

清华&北大&微软&利物浦大学联合提出Glyph-ByT5-v2这款工具支持多语言图文生成,包括英语、中文、日文、韩文、法文、德文、西班牙文、意大利文、葡萄牙文和俄文。 以下分别展示中、英、日、韩图文的视觉文本结果一起带大家感受一下。 相关链接 论文地址…

6G时代,即将来临!

日前,由未来移动通信论坛、紫金山实验室主办的2024全球6G技术大会在南京召开。本次大会以“创新预见6G未来”为主题,在大会开幕式上发布了协力推进全球6G统一标准行动的倡议和紫金山科技城加速培育以6G技术引领未来产业行动计划。 在我国已开展第五代移动…

苹果手机safari浏览器的userAgent显示为电脑的userAgent问题解决

目录 1.问题背景 2.userAgent 3.解决 1.问题背景 开发了一个H5,是通过生成二维码,扫描这个二维码后就跳到这个H5,所以需要判断一下扫描的设备是否为手机,然后由于业务逻辑还需要判断一下手机是Android、iOS还是iPad。一般前端…

Shell 编程之条件语句

Shell 编程之条件语句 一、条件测试操作test命令文件测试整数值比较字符串比较逻辑测试 二、if条件语句单分支 if 语句双分支 if 语句多分支 if 语句 三、case 分支语句case语句的结构case 语句应用示例 四、注意事项 在Shell编程中,条件语句是非常重要的一部分&…

Docker 下载与安装以及配置

安装yum工具 yum install -y yum-ulits配置yum源 阿里云源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Docker 17.03后为两个版本: 社区版(Community Edition,缩写为 CE&#x…

获取时间戳是使用System.currentTimeMillis()还是使用new Date().getTime()(阿里开发规范)?

1.阿里规范 在阿里的Java开发手册中强制要求使用System.currentTimeMillis() 2.为什么(源码详解) new Date().getTime()它实际上也是调用的System.currentTimeMillis(),源码分析。 这个fastTime是它的成员变量,在new Date()的时候就被赋值了。 扩展一…

191.回溯算法:组合总和|||(力扣)

代码解决 class Solution { public:vector<vector<int>> result; // 存储所有符合条件的组合vector<int> res; // 当前组合// 回溯函数void backtracing(int k, int n, int index, int sum) {// 如果当前组合的长度等于k&#xff0c;且总和等于nif (res.si…

Django 模版变量

1&#xff0c;模版变量作用 模板变量使用“{{ 变量名 }}” 来表示模板变量前后可以有空格&#xff0c;模板变量名称&#xff0c;可以由数字&#xff0c;字母&#xff0c;下划线组成&#xff0c;不能包含空格模板变量还支持列表&#xff0c;字典&#xff0c;对象 2&#xff0c;…

odoo17 小变更4

odoo17 小变更4 1、代码中去除了访问私人地址权限,但翻译中均还有,怪不 model:res.groups,name:base.group_private_addresses msgid "Access to Private Addresses" msgstr "" 代码也查看了,的确没有了此权限组 --><record model="res.g…

mysql分析常用锁、动态监控、及优化思考

这里写自定义目录标题 1.未提交事物&#xff0c;阻塞DDL&#xff0c;继而阻塞所有同表的后续操作,查看未提交事务的进程2.存着正在进行的线程数据。3.根据processlist表中的id杀掉未释放的线程4.查看正在使用的表5.mysql为什么state会有waiting for handler commit6.什么情况导…

图扑助力铝型材挤压:数字孪生引领智慧管理

通过图扑数字孪生技术&#xff0c;为铝型材挤压车间提供实时监控和优化管理方案。高精度三维建模和数据可视化提升了生产效率和管理透明度&#xff0c;推动智能制造和资源优化配置。

HackTheBox-Linux基础

Linux 结构 历史 许多事件导致了第一个 Linux 内核的创建&#xff0c;并最终创建了 Linux 操作系统 &#xff08;OS&#xff09;&#xff0c;从 1970 年 Ken Thompson 和 Dennis Ritchie&#xff08;当时都在 AT&T 工作&#xff09;发布 Unix 操作系统开始。伯克利软件发行…

[SAP ABAP] 运算符与操作符

1.算数运算符 算术运算符描述加法-减法*乘法/除法MOD取余 示例1 输出结果: 输出结果: 2.比较运算符 比较运算符描述示例 等于 A B A EQ B <> 不等于 A <> B A NE B >大于 A > B A GT B <小于 A < B A LT B >大于或等于 A > B A GE B <小…

SCI一区TOP|双曲正弦余弦优化算法(SCHO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年&#xff0c;J Bai受到双曲正弦余弦函数启发&#xff0c;提出了双曲正弦余弦优化算法&#xff08;Sinh Cosh optimizer, SCHO&#xff09;。 2.算法原理 2.1算法思想 SCHO灵感来源…