python中logging日志模块

模块化设计
logger:日志器,提供程序可使用的接口
handler:处理器,用于写入日志文件并输出到指定位置,如文件、控制台
filter:过滤器,用于输出符合指定条件的日志记录
formatter:各时期,决定日志记录的输出格式

日志级别
DEBUG:最低级别,追踪问题时使用
INFO:记录程序中一般事件的信息,或确认一切工作正常
WARNING:记录信息,用于警告
ERROR:用于记录程序报错信息
CRITICAL:最高级别,记录可能导致程序崩溃的错误

实际使用步骤
创建日志器looger(logging.getLogger())->设置日志级别(setlevel(loging.DEBUG))->创建日志文件->设置日志格式->为日志器添加处理方式

日志输出格式字符串

%(name)s:logging的名字
%(message)s:用户输出的消息
%(asctime)s:输出时间
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前事件;用UNIX标准表示时间的浮点数
%(relative:Created)d输出日志信息时;自logger创建以来的毫秒数
%(thread)d:线程ID
%(threadName)s:线程名可能没有
%(process)d:进程ID可能没有

基本用法

import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger()

logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')

实际用法

# import logging
# from logging.handlers import RotatingFileHandler
# # 创建日志器,
# logger = logging.getLogger()
# # 设置日志级别
# logger.setLevel(logging.DEBUG)
# # 创建处理器对象,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
# file_log_handler = RotatingFileHandler("log/test.log", maxBytes=1024 * 1024 * 100, backupCount=10)
# # 创建日志记录的格式
# formatter = logging.Formatter('%(levelname)s %(asctime)s %(filename)s:第%(lineno)d行: %(message)s')
# # 设置日志记录格式
# file_log_handler.setFormatter(formatter)
# stream_handler = logging.StreamHandler()  # 往屏幕上输出
# # 为日志器添加处理方式
# logger.addHandler(file_log_handler)
# logger.addHandler(stream_handler)
# logger.debug("这条日志是debug级别")
# logger.info("这条日志是info级别")
# logger.warning("这条日志是warning级别")
# logger.error("这条日志是error级别")
# logger.critical("这条日志是critical级别")

#优化,封装,方便需要使用时,直接调用,将日志按照日期分别放到不同文件,日志名称以时间命名

import logging,os,time
class Logging():
    def make_log_dir(self,dirname='logs'): #创建日志存放目录,并返回目录的路径
        now_dir=os.path.dirname(__file__)
        # father_path=os.path.split(now_dir)[0]
        path=os.path.join(now_dir,dirname)
        path=os.path.normpath(path) #os.path.normpath()方法规范路径输出格式
        if not os.path.exists(path):
            os.makedirs(path)
        return path

    def get_log_filename(self): #创建文件文件名格式,便于区分每天的日志
        filename="{}.log".format(time.strftime("%Y-%m-%d",time.localtime()))
        filename=os.path.join(self.make_log_dir(),filename)
        filename=os.path.normpath(filename)
        return filename

    def log(self,level='DEBUG'): #生成日志的主方法,传入对哪些级别以上的日志进行处理
        logger=logging.getLogger()
        logger.setLevel(level)
        if not logger.handlers:
            sh=logging.StreamHandler()
            fh=logging.FileHandler(filename=self.get_log_filename(),mode='a',encoding="utf-8")
            fmt=logging.Formatter("%(asctime)s-%(levelname)s-%(filename)s-line:%(lineno)d-message:%(message)s")
            sh.setFormatter(fmt=fmt)
            fh.setFormatter(fmt=fmt)
            logger.addHandler(fh)
            logger.addHandler(sh)
        return logger
if __name__=='__main__':
    logger=Logging().log(level="ERROR")
    logger.debug("debug-111111")
    logger.info("info-2222222")
    logger.error("error-333333")
    logger.warning("warning-4444444")
    logger.critical("critical-555555")

其他日志模块
第三方库 loguru
pip3 install loguru
参考:https://www.jb51.net/article/268300.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试运维小猴子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值