当前位置:   article > 正文

python如何用logging模块将日志同时输出到控制台和文件中_python logging 输出到文件

python logging 输出到文件

1.日志的等级

debug: 调试信息
info: 描述重要事件
warning:警告信息
error: 报错异常信息
critical: 严重错误

2.logging模块包括4个组件

1)logger 日志器,提供了应用程序的接口
2)Handler 处理器,通过logger在不同位置输出日志
3)Formator 格式器,决定日志以什么样的格式显示
4)Filter 过滤器,过滤哪些需要记录输出,哪些需要丢弃
注:一个日志器,可以对应多个处理器;每个处理器可以有单独的格式器。

3.Formatter 函数各参数

%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
注:level: 设置日志级别,默认为logging.WARNING—需要用大写

具体的代码块如下

# coding:utf-8
import os
import logging
from logging import handlers
import sys

dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
LOG_ROOT = dirname


def get_logger(log_filename, level=logging.INFO, when='D', back_count=0):
    """
    :brief  日志记录
    :param log_filename: 日志名称
    :param level: 日志等级
    :param when: 间隔时间:
        S:秒
        M:分
        H:小时
        D:天
        W:每星期(interval==0时代表星期一)
        midnight: 每天凌晨
    :param back_count: 备份文件的个数,若超过该值,就会自动删除
    :return: logger
    """
    # 创建一个日志器。提供了应用程序接口
    logger = logging.getLogger(log_filename)
    # 设置日志输出的最低等级,低于当前等级则会被忽略
    logger.setLevel(level)
    # 创建日志输出路径
    log_path = os.path.join(LOG_ROOT, "logs")
    if not os.path.exists(log_path):
        os.mkdir(log_path)
    log_file_path = os.path.join(log_path, log_filename)
    # 创建格式器
    formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    # 创建处理器:ch为控制台处理器,fh为文件处理器
    ch = logging.StreamHandler()
    ch.setLevel(level)
    # 输出到文件
    fh = logging.handlers.TimedRotatingFileHandler(
        filename=log_file_path,
        when=when,
        backupCount=back_count,
        encoding='utf-8')
    fh.setLevel(level)
    # 设置日志输出格式
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # 将处理器,添加至日志器中
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    return logger
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

用的时候只需要调用代码

logger = get_logger('store_data.log')
logger.info(f"----------------数据写入成功,正常退出------------------------")
  • 1
  • 2

参考文章连接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/512744
推荐阅读
相关标签
  

闽ICP备14008679号