python调用logging,记录日志的方法笔记

python调用logging,记录日志的方法笔记
保存当前文件为logset.py,在其他py文件引用时,使用from logset import logger 格式导入
调用时,使用 logger.info(‘xxxxx’) 和 logger.dubug(‘xxxxxx’)即可。

# coding:utf-8


"""
该方法提供了记录日志的相关设置,定义了logger日志记录器.
    调用logger.debug()/logger.info()/logger.warning()/logger.error()/logger.critical()方法可以记录并保存日志到调用程序所在路径下Log文件夹
    示例:
    logger.debug("打印日志测试,debug级别")
    logger.info("dayinrizhiceshi,INFO级别")
    logger.warning("打印日志等级测试,当前warning级别")
    logger.error("error级别日志打印测试")
    logger.critical("致命等级日志记录打印测试")
    
author:yutao
"""

import logging  #调用python logging 方法库
from logging.handlers import RotatingFileHandler
import os
from datetime import datetime

"""
logging 库采取了模块化的设计,提供了许多组件:记录器、处理器、过滤器和格式化器。
    Logger 暴露了应用程序代码能直接使用的接口。
    Handler 将(记录器产生的)日志记录发送至合适的目的地。
    Filter 提供了更好的粒度控制,它可以决定输出哪些日志记录。
    Formatter 指明了最终输出中日志记录的内容和格式。
"""

CurrentTime = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")   #获取当前时间,用于后面命名文件
CurrentPath = os.getcwd()    #获取当前程序文件所在路径
path = CurrentPath + ("\\Log")  #定义log文件存放路径
if not os.path.exists(path):
    os.mkdir(path)       #若当前程序文件路径无指定的log文件夹,则创建该文件夹

logger = logging.getLogger("Test")   #获取一个logging记录器 Test

logger.setLevel(level = logging.DEBUG)  #定义日志记录器记录日志的等级
'''
    logging.DEBUG('debug级别,一般用来打印一些调试信息,级别最低')
    logging.INFO('info级别,一般用来打印一些正常的操作信息')
    logging.WARNING('waring级别,一般用来打印警告信息')
    logging.ERROR('error级别,一般用来打印一些错误信息')
    logging.CRITICAL('critical级别,一般用来打印一些致命的错误信息,等级最高')
'''

formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
"""
    Formatter模块:
    为handler设置输出格式,handler是负责把日志输出到哪里,所以是给它设置格式,而不是给logger;
    %(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 用户输出的消息

"""
# 创建一个handler模块,将INFO等级的日志保存到文件名为CMDlog的文件中,保存简单地调试日志
file_handler = RotatingFileHandler("%s/CMDlog_%s.log"%(path,CurrentTime),maxBytes=5*1024*1024,backupCount=10)
file_handler.setLevel(level = logging.INFO)
file_handler.setFormatter(formatter)

# 创建一个handler模块,将DEBUG等级的日志保存到文件名为CR7log的文件中,保存详细的调试日志
file_handler2 = RotatingFileHandler("%s/CR7log_%s.log"%(path,CurrentTime),maxBytes=5*1024*1024,backupCount=3)
file_handler2.setLevel(level = logging.DEBUG)
file_handler2.setFormatter(formatter)

# 创建一个handler模块,将INFO等级的日志输出到控制台输出显示,方便查看实时运行调试状态
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)

# 启用创建的3个handler模块
logger.addHandler(file_handler)
logger.addHandler(file_handler2)
logger.addHandler(stream_handler)

"""
    Handler 模块:
    指定handler,它不知道要怎么处理日志,要输出到哪里去。那我们就给他加一个Handler吧,Handler的种类有很多,常用的有4种:
    logging.StreamHandler -> 控制台输出
    logging.FileHandler -> 文件输出
    logging.handlers.RotatingFileHandler -> 按照大小自动分割日志文件,一旦达到指定的大小重新生成文件
    logging.handlers.TimedRotatingFileHandler -> 按照时间自动分割日志文件
    其中file_handler.setLevel(level = logging.DEBUG)需要再次设置,因为logger设置logger.setLevel(level = logging.DEBUG)
    是告诉logger要记录哪些级别的日志,而给handler设置,是告诉它要输出哪些级别的日志,相当于进行了两次过滤。
    这样的好处在于,当我们有多个日志去向时,比如既保存到文件,又输出到控制台,就可以分别给他们设置不同的级别;
    logger 的级别是先过滤的,所以被 logger 过滤的日志 handler 也是无法记录的,这样就可以只改 logger 的级别而影响所有输出。
    两者结合可以更方便地管理日志记录的级别。

"""

if __name__ == "__main__":
    logger.debug("打印日志测试,debug级别")
    logger.info("dayinrizhiceshi,INFO级别")
    logger.warning("打印日志等级测试,当前warning级别")
    logger.error("error级别日志打印测试")
    logger.critical("致命等级日志记录打印测试")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值