• python----日志模块loggin的使用,按日志级别分类写入文件


    1、日志的级别

    日志一共分为5个等级,从低到高分别是:

    级别说明
    DEBUG 输出详细的运行情况,主要用于调试。
    INFO 确认一切按预期运行,一般用于输出重要运行情况。
    WARNING 系统运行时出现未知的事情(如:警告内存空间不足),但是软件还可以继续运行,可能以后运行时会出现问题。
    ERROR 系统运行时发生了错误,但是还可以继续运行。
    CRITICAL

    一个严重的错误,表明程序本身可能无法继续运行。

    这5个等级,也分别对应5种打印日志的方法:debug、info、warning、error、critical。默认的日志收集器是收集WARNING以上等级的日志。

    2、日志文件分类存储代码,创建文件login_demo02.py

    import logging
    class log:
        def __init__(self):
            # 创建自己的日志收集器
            self.my_log = logging.getLogger("my_log")
            # 设置收集的日志等级,设置为DEBUG等级
            self.my_log.setLevel("DEBUG")
             # 日志输出渠道
            # 创建一个日志输出渠道(输出到控制台),并且设置输出的日志等级为INFO以上
            self.l_s = logging.StreamHandler()
            self.l_s.setLevel("DEBUG")
            # 创构建一个日志输出渠道(输出到文件)
            l_f = logging.FileHandler("error.log",encoding='utf8')
            l_f.setLevel("ERROR")#设置输出的日志等级为ERROR以上
            l_d=logging.FileHandler("debug.log",encoding='utf-8')
            l_d.setLevel("DEBUG")#设置输出的日志等级为DEBUG以上
            cc=logging.FileHandler("info.log",encoding='utf-8')
            cc.setLevel("INFO")#设置输出的日志等级为INFO以上
            #将日志输出渠道添加到日志收集器中
            self.my_log.addHandler(self.l_s)
            self.my_log.addHandler(l_f)
            self.my_log.addHandler(l_d)
            self.my_log.addHandler(cc)
            # 设置日志输出的格式
            # 可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
            # % (name)s: 收集器名称
            # % (levelno)s: 打印日志级别的数值
            # % (levelname)s: 打印日志级别名称
            # % (pathname)s: 打印当前执行程序的路径,其实就是sys.argv()
            # % (filename)s: 打印当前执行程序名
            # % (funcName)s: 打印日志的当前函数
            # % (lineno)d: 打印日志的当前行号
            # % (asctime)s: 打印日志的时间
            # % (thread) d: 打印线程ID 
            # % (threadName)s: 打印线程名称
            # % (process) d: 打印进程ID
            # % (message) s: 打印日志信息
            ft = "%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s: %(message)s"#工作中常用的日志格式
            ft = logging.Formatter(ft)
            # 设置控制台和日志文件输出日志的格式
            self.l_s.setFormatter(ft)
            l_f.setFormatter(ft)
            l_d.setFormatter(ft)
            cc.setFormatter(ft)
    if __name__ == '__main__': my_log=log().my_log ss="一条小日志" my_log.info(ss) my_log.debug(ss) my_log.error(ss)

    运行结果如下:

     3、其他文件调用

    from login_demo02 import *
    
    my_log=log().my_log
    cc="这是一条日志"
    my_log.debug(cc)
    my_log.info(cc)
    my_log.error(cc)

    运行结果:

     使用日志配置进行日志保存:

    创建log.conf文件,内容如下:

    [loggers]
    keys=root,infoLogger
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler,fileHandler
    
    [logger_infoLogger]
    handlers=consoleHandler,fileHandler
    qualname=infoLogger
    propagate=0
    
    [handlers]
    keys=consoleHandler,fileHandler
    
    [handler_consoleHandler]
    class=StreamHandler
    level=INFO
    formatter=form02
    args=(sys.stdout,)
    
    [handler_fileHandler]
    class=FileHandler
    level=INFO
    formatter=form01
    args=('../log/infolog/info.log', 'a')
    
    [formatters]
    keys=form01,form02
    
    [formatter_form01]
    format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s
    
    [formatter_form02]
    format=>%(asctime)s | %(levelname)s |%(filename)s.%(funcName)s-->line:%(lineno)d: %(message)s

    代码如下:

    import logging
    from logging import config
    class MyLog(object):
     def __init__(self):
      config.fileConfig('../config/log.conf')
      self.logger = logging.getLogger()
     @property
     def my_logger(self):
      return self.logger
    if __name__ == '__main__':
     log = MyLog()
     log.my_logger.info('it is my test log message info')

     

     配置参考:https://www.jb51.net/article/190556.htm

  • 相关阅读:
    LeetCode 43. Multiply Strings
    LeetCode 42. Trapping Rain Water
    SQLite数据库的基本API函数
    在使用SQLite插入数据时出现乱码的解决办法
    关于1>LINK : fatal error LNK1168: 无法打开 ....exe或者....dll进行写入的问题
    如何向VS2010中插入ActiveX控件并且附带相应的类
    字符的编码方式介绍
    如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
    ActiveX控件的基本操作方法以及如何在VS2010下使用控件
    关于使用regsvr32命令注册ActiveX控件失败的解决办法
  • 原文地址:https://www.cnblogs.com/jinbiaobowen/p/13844944.html
Copyright © 2020-2023  润新知