Python log日志

本篇介绍Python自带日志模块logging

1、日志作用

1、记录程序执行过程

2、通过日志还原用户操作

2、日志要素

输出时间、日志级别、日志格式、日志内容、日志渠道(日志输出的位置)

3、日志级别

debug、info、warning、error、critical

4、创建一个日志收集器

import logging
from logging import handlers

1、创建日志收集器

mylog = logging.getLogger(name='mylog')

2、创建日志收集渠道

#控制台
pycharm = logging.StreamHandler()
#日志切割,秒分时日月周
#TimedRotatingFileHandler参数:
#filename:文件名称(如果不是当前路径则要带上路径)
#when:    日志滚动周期单位(切割周期单位)  H:小时  S:秒   D:日   W:周   M:分
#interval:when的数值
file = handlers.TimedRotatingFileHandler(filename='test.log', when='D', interval=1, encoding='utf-8')

3、创建日志格式

# %(name)s            Logger的名字
# %(levelno)s         数字形式的⽇志级别
# %(levelname)s       ⽂本形式的⽇志级别
# %(pathname)s        调⽤⽇志输出函数的模块的完整路径名,可能没有
# %(filename)s        调⽤⽇志输出函数的模块的⽂件名称
# %(module)s          调⽤⽇志输出函数的模块名
# %(funcName)s        调⽤⽇志输出函数的函数名
# %(lineno)d          调⽤⽇志输出函数的语句所在的代码⾏
# %(created)f         当前时间,⽤UNIX标准的表⽰时间的浮点数表示
# %(relativeCreated)d 输出⽇志信息时的,⾃Logger创建以来的毫秒数
# %(asctime)s         字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后⾯的是毫秒
# %(thread)d          线程ID。可能没有
# %(threadName)s      线程名。可能没有
# %(process)d         进程ID。可能没有
# %(message)s         ⽤户输出的消息
fmt="[%(asctime)s-%(name)s-%(levelname)s-%(pathname)s-%(funcName)s-%(lineno)d]>>>%(message)s"
log_fmt = logging.Formatter(fmt=fmt)

4、渠道绑定日志格式

pycharm.setFormatter(fmt=log_fmt)
file.setFormatter(fmt=log_fmt)

5、日志收集器设置日志级别

mylog.setLevel(level=logging.INFO)
# 渠道也可以设置日志级别,以进行区别处理,如果只设置日志收集器的日志级别,那么渠道都默认继承日志收集器的日志级别
# pycharm.setLevel(level=logging.INFO)  
# file.setLevel(level=logging.INFO)

6、给日志收集器绑定渠道

mylog.addHandler(pycharm)
mylog.addHandler(file)

5、简单封装

将上面的步骤进行整合并简单封装如下

import logging
from logging import handlers


def log_func():
    # 1、创建日志收集器
    mylog = logging.getLogger(name='mylog')
    # 2、创建日志收集渠道
    # 控制台
    pycharm = logging.StreamHandler()
    # 日志切割,秒分时日月周
    # TimedRotatingFileHandler参数:
    # filename:文件名称(如果不是当前路径则要带上路径)
    # when:    日志滚动周期单位(切割周期单位)  H:小时  S:秒   D:日   W:周   M:分
    # interval:when的数值
    file = handlers.TimedRotatingFileHandler(filename='test.log', when='D', interval=1, encoding='utf-8')
    # 3、创建日志格式
    # %(name)s            Logger的名字
    # %(levelno)s         数字形式的⽇志级别
    # %(levelname)s       ⽂本形式的⽇志级别
    # %(pathname)s        调⽤⽇志输出函数的模块的完整路径名,可能没有
    # %(filename)s        调⽤⽇志输出函数的模块的⽂件名称
    # %(module)s          调⽤⽇志输出函数的模块名
    # %(funcName)s        调⽤⽇志输出函数的函数名
    # %(lineno)d          调⽤⽇志输出函数的语句所在的代码⾏
    # %(created)f         当前时间,⽤UNIX标准的表⽰时间的浮点数表示
    # %(relativeCreated)d 输出⽇志信息时的,⾃Logger创建以来的毫秒数
    # %(asctime)s         字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后⾯的是毫秒
    # %(thread)d          线程ID。可能没有
    # %(threadName)s      线程名。可能没有
    # %(process)d         进程ID。可能没有
    # %(message)s         ⽤户输出的消息
    fmt = "[%(asctime)s-%(name)s-%(levelname)s-%(pathname)s-%(funcName)s-%(lineno)d]>>>%(message)s"
    log_fmt = logging.Formatter(fmt=fmt)
    # 4、渠道绑定日志格式
    pycharm.setFormatter(fmt=log_fmt)
    file.setFormatter(fmt=log_fmt)
    # 5、日志收集器设置日志级别
    mylog.setLevel(level=logging.INFO)
    # 渠道也可以设置日志级别,以进行区别处理,如果只设置日志收集器的日志级别,那么渠道都默认继承日志收集器的日志级别
    # pycharm.setLevel(level=logging.INFO)  
    # file.setLevel(level=logging.INFO)
    # 6、给日志收集器绑定渠道
    mylog.addHandler(pycharm)
    mylog.addHandler(file)
    return mylog


logs = log_func()

接下来在其他任意文件中都可以直接导入logs实例对象来进行日志操作(此处是成本最低最简单的log单例模式,十分方便),例如

logs.debug('这是debug')
logs.info('这是info')
logs.warning('这是warning')
logs.error('这是error')
posted @ 2022-05-28 19:00  少年不太冷2  阅读(144)  评论(0)    收藏  举报