Python-日志模块

目录

一、日志级别

二、日志配置

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,  # 日志文件保存数量限制

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1931java Web披萨店订餐系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web 披萨店订餐系统是一套完善的信息管理系统,结合java 开发技术和bootstrap完成本系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。 视频地址:…

sixLabors.ImageSharp图片截取

一、nuget <PackageReference Include"SixLabors.ImageSharp" Version"3.1.4" /> 二、代码 using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Diagnostics; u…

吉时利 2420(KEITHLEY) 高电流源表

Keithley 2420高电流源表&#xff0c;60V&#xff0c;3A&#xff0c;60W Keithley 2420 高压源表是一款 60W 仪器&#xff0c;设计用于输出和测量 5V&#xff08;输出&#xff09;和 1V&#xff08;测量&#xff09;至 60V 的电压以及 100pA 至 3A 的电流。2420 型的生产测试应…

【文献及模型、制图分享】1985-2015年美国坦帕湾流域土地开发利用强度时空变化分析

公众号新功能 目前公众号新增以下等功能 1、处理GIS出图、Python制图、区位图、土地利用现状图、土地利用动态度和重心迁移图等等 2、核密度分析、网络od分析、地形分析、空间分析等等 3、地理加权回归、地理探测器、生态环境质量指数、地理加权回归模型影响因素分析、计算…

C语言入门系列:数据类型之整数

文章目录 一&#xff0c;简介二&#xff0c;整数的符号1&#xff0c;有符号整数2&#xff0c;无符号整数3&#xff0c;char表示整数的特殊性 三&#xff0c;整数的子类型1&#xff0c;三种子类型2&#xff0c;定义整形的最佳实践 四&#xff0c;整数类型的极限值五&#xff0c;…

multiprocessing多进程计算及与rabbitmq消息通讯实践

1. 需求与设计 我所设计的计算服务旨在满足多个客户对复杂计算任务的需求。由于这些计算任务通常耗时较长且资源消耗较大&#xff0c;为了优化客户体验并减少等待时间&#xff0c;我采取了并行计算的策略来显著提升计算效率。 为实现这一目标&#xff0c;我计划利用Python的m…

微信小程序毕业设计-“黄师日报”平安系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

奔驰EQS SUV升级原厂主动式氛围灯效果展示

以下是一篇关于奔驰 EQs 升级原厂主动氛围灯案例的宣传文案&#xff1a; 在汽车科技不断演进的今天&#xff0c;我们自豪地为您呈现奔驰 EQs 升级原厂主动氛围灯的精彩案例。 奔驰 EQs&#xff0c;作为豪华电动汽车的典范&#xff0c;其卓越品质与高端性能有目共睹。而此次升…

定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)

在前面的文章中&#xff0c;类中只有公用数据而无成员函数&#xff0c;而且只有1个对象。可以直接在主函数中进行输入和输出。若有多个对象&#xff0c;需要分别引用多个对象中的数据成员&#xff0c;可以写出如下程序&#xff1a; &#xff08;1&#xff09;编写程序&#xff…

流程控制相关

1.break语句 只能用在循环体内&#xff0c;用来结束当前循环 语法&#xff1a; while 循环条件表达式&#xff1a; 语句块 if 条件表达式&#xff1a; break 语句块 for i in 迭代对象&#xff1a; 语句块 if 条件表达式&#xff1a; break 语句块 小练&#xff1a; 求一…

WPS相同字体但是部分文字样式不一样解决办法

如下图&#xff0c;在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪&#xff0c;但是把鼠标移到这个文字的位置&#xff0c;发现它和其他正常文字的字体是一样的&#xff0c;都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…

MySQL 死锁查询和解决死锁

来了来了来了&#xff01;客户现场又要骂街了&#xff0c;你们这是什么破系统怎么这么慢啊&#xff1f;&#xff01;&#xff1f;&#xff01; 今天遇到了mysql死锁&#xff0c;直接导致服务器CPU被PUA直接GUA了&#xff01; 别的先别管&#xff0c;先看哪里死锁&#xff0c;或…

使用Mixamo极简绑骨,导入unity中使用

如果你只想专注于角色建模&#xff0c;对于动画设计没有过多精力&#xff1b;如果你想白嫖别人的角色动画&#xff0c;用到自己的模型上&#xff1b;那么&#xff0c;这个网站很适合你&#xff1a;https://www.mixamo.com/ 操作步骤&#xff1a; 首先将自己的模型上传到这个网…

如何混淆 net core 8 架构 C# 编译程序

如何混淆 net core 8 架构 C# 编译程序 一、使用混淆工具 .NET Reactor V6.9二、net core 8 架构 C# 编译程序&#xff08;发布的单文件&#xff09;1、通过发布的单文件程序&#xff0c;可以直接在 .NET Reactor 拖入或打开 &#xff0c;勾选自己需要的保护功能。2、勾选自己需…

SHA256 安全散列算法加速器实验

1、SHA256 介绍 SHA256 加速器是用来计算 SHA-256 的计算单元&#xff0c; SHA256 是 SHA-2 下细分出的一种算法。 SHA-2 名称来自于安全散列算法 2 &#xff08;英语&#xff1a; Secure Hash Algorithm 2 &#xff09;的缩写&#xff0c;一种密码散列函 数算法标准…

群辉NAS中文件下载的三种方案

目录 一、迅雷套件 1、添加套件来源 2、安装套件 3、手机安装迅雷 二、qBittorrent套件 1、添加套件来源 2、改手工安装 3、更新后的问题 4、最后放弃DSM6 (1)上传文件手工安装 (2)添加套件来源 5、解决登陆报错 6、添加tracker 7、修改下载默认位置 8、手机…

经验总结--开关MOS管发热的一般原因/电源开发经验总结

开关MOS管发热的一般原因 做电源设计,或者做驱动方面的电路,难免要用到场效应管,也就是人们常说的MOS管。MOS管有很多种类,也有很多作用。做电源或者驱动的使用,当然就是用它的开关作用。 无论N型或者P型MOS管,其工作原理本质是一样的。MOS管是由加在输入端栅极的电压来控…

C#委托:事件驱动编程的基石

目录 了解委托 委托使用的基本步骤 声明委托(定义一个函数的原型&#xff1a;返回值 参数类型和个数&#xff09; 根据委托定义的函数原型编写需要的方法 创建委托对象&#xff0c;关联“具体方法” 通过委托调用方法&#xff0c;而不是直接使用方法 委托对象所关联的方…

Electron快速入门(三):在(二)的基础上修改了一个文件夹做了个备忘录

Lingering Memories 诗绪萦怀 修改index.html <!--index.html--> <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta h…

一种简单的图像分析

简介 一种简单的边界分析&#xff0c;通过相邻的像素的灰度进行判断&#xff0c;计算出边界。 测试1 原图 结果 测试2 原图 结果 代码说明 主要的技术在makeTable过程中&#xff0c;这个过程主要执行了以下几步 计算每个像素的灰度计算相邻多个像素的最大灰度差统计灰度差…