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,  # 日志文件保存数量限制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值