• 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可能没有
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    基本用法

    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    实际用法

    # 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")
    
    
    • 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
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

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

  • 相关阅读:
    【历史上的今天】9 月 16 日:乔布斯的归来;苹果崛起;易语言发布
    python基础知识整理 08-多任务:进程
    L2-3 图着色问题
    Driud数据库连接池的使用
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java快递柜管理系统25b40
    用Abp实现找回密码和密码强制过期策略
    手机全自动无人直播系统,成为商家实景无人直播带货好帮手!
    JUC笔记(一) --- 计算机基础
    黑豹程序员-java语法分析入门案例(模拟代码编译器解析过程)
    Flink系列之Flink中Source_Transform_Sink整理和实战
  • 原文地址:https://blog.csdn.net/HBT036017/article/details/128168166