zoukankan      html  css  js  c++  java
  • python基础:日志模块logging,nnlog

    python里面用来打印日志的模块,就是logging模块,logging模块可以在控制台打印日志,也可以写入文件中。也可以两个操作都执行

    1、控制台输入

    import logging#导入模块
    logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别,会把该级别及其以上级别的日志都打印出来
                        #比如如果定义level为debug,那么debug,info,warning,error级别的日志信息都会打印
                        # filename='my.log',#日志文件名,不写这个,直接打印控制台。加上就不会再控制台打印
                        # filemode='a',#a代表追加。w清空重写,
                        format=
                        '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
                        #日志格式:时间    python文件       行                  级别        日志信息
                        )
    logging.debug('debug级别,最低级别,一般开发人员用来打印一些调试信息')
    logging.info('info级别,正常输出信息,一般用来打印一些正常的操作')
    logging.warning('waring级别,一般用来打印警信息')
    logging.error('error级别,一般用来打印一些错误信息')

    打印结果:

    因为在配置日志信息时,定义level=logging.DEBUG,而debug级别是最低的,所以比他高的级别也都打印出来了。最终debug,info,warning,error级别的日志都打出来了

    2、日志写入文件

    只需要将控制台的代码中的filename和filemode注释掉就可

    #http://www.nnzhp.cn/archives/436
    import logging
    # from logging import  handlers
    logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别,会把该级别及其以上级别的日志都打印出来
                        #比如如果定义level为debug,那么debug,info,warning,error级别的日志信息都会打印
                        filename='my.log',#日志文件名,不写这个,直接打印控制台。加上就不会再控制台打印
                        filemode='a',#a代表追加。w清空重写,
                        format=
                        '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
                        #日志格式:时间    python文件       行                  级别        日志信息
                        )
    logging.debug('debug级别,最低级别,一般开发人员用来打印一些调试信息')
    logging.info('info级别,正常输出信息,一般用来打印一些正常的操作')
    logging.warning('waring级别,一般用来打印警信息')
    logging.error('error级别,一般用来打印一些错误信息')

    运行后可以看到,控制台已经不输出日志信息了,同时在本地目录下生成了一个my.log文件

    我在两天分别执行了一次,所以会看到文件中一共有2段,因为文件是a模式,所以追加。选中的是第二次执行追加的日志

    三、同时控制台输出,并写入文件

    这时就需要用到处理器handles,可以指定日志输出到控制台,还是输出到文件。常见的有4中,这里介绍两种

      StreamHandler 控制台输出 

      TimeRotatingFileHandler 按照时间自动分割日志文件

    import logging
    from logging import handlers#需要导入handlers

    logger=logging.getLogger()#实例化一个logger对象 logger.setLevel(logging.DEBUG)#设置日志级别 cl=logging.StreamHandler()#负责在控制台输出 bl=handlers.TimedRotatingFileHandler(filename='a.log',when='S',interval=1,backupCount=5,encoding='utf-8') #when =’S‘表示以秒为时间间隔,D:天 M:分钟 H :小时 #interval 时间间隔为1,单位是when的值,也就是1S备份一次 #backupcount 备份日志文件个数,超过后自动清除最早的 fmt=logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s') #指定日志的格式 cl.setFormatter(fmt)#设置控制台输出的格式 bl.setFormatter(fmt)#设置文件日志的格式 logger.addHandler(cl) logger.addHandler(bl)#把设置好的对象放入logger logger.debug('我是debug...') logger.warning('我是warning...') #结果:运行后,产生日志文件,同时1s后备份一个日志文件。 #再次运行2次,产生3个备份文件。 #运行第4次,第一个备份文件删除。

    四、封装日志类

    import logging
    from logging import  handlers
    class MyLogger():
        def __init__(self,file_name,level='info',backupCount=5,when='D'):
            logger = logging.getLogger()  # 实例化一个logger对象
            logger.setLevel(self.get_level(level))  # 设置日志级别
            cl = logging.StreamHandler()  # 负责在控制台输出
            bl = handlers.TimedRotatingFileHandler(filename=file_name, when=when, interval=1, backupCount=backupCount, encoding='utf-8')
            fmt = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
            # 指定日志的格式
            cl.setFormatter(fmt)  # 设置控制台输出的格式
            bl.setFormatter(fmt)  # 设置文件日志的格式
            logger.addHandler(cl)
            logger.addHandler(bl)
            self.logger=logger
        def get_level(self,str):
            level={
                'debug':logging.DEBUG,
                'info':logging.INFO,
                'warn':logging.WARNING,
                'error':logging.ERROR
            }
            str=str.lower()#转换成小写
            return level.get(str)
    
    log=MyLogger('aaa.log','debug')
    log.logger.warning('warning日志信息。。。。')

    五、nnlog

     nnlog事对logging写日志操作进行了封装,使用起来更方便。该模块是第三方模块,需要先安装并导入

    log = nnlog.Logger(file_name='my1.log', level='debug', when='D', backCount=5, interval=1)
    # file_name是日志文件名
    # level是日志级别,如果不传的话默认是debug级别
    # when是日志文件多久生成一个,默认是按天,S 秒、M 分、 H 小时、 D 天、 W 每星期
    # backCount是备份几个日志文件,默认保留5天的
    # interval是间隔多久生成一个日志文件,默认是1天
    log.debug('默认日志级别是debug')
    log.info('info级别')
    log.warning('waring级别')
    log.error('error级别')

    该模块实例化后,可同时在控制台和文件输出

  • 相关阅读:
    java——多线程回调函数
    JAVA四种引用
    史上最简单的 SpringCloud 教程
    javaWeb防止恶意登陆或防盗链的使用
    Spring缓存注解@Cacheable,@CacheEvict,@CachePut的使用
    SpringBoot RedisCacheConfig自定义设置
    Java性能分析神器-JProfiler详解(转)
    SpringBoot自动配置的实现原理
    python 处理Excel 常见问题-读取Excel中时间,封装函数
    Excel文件转换为txt文本第一次更新
  • 原文地址:https://www.cnblogs.com/bendouyao/p/9142841.html
Copyright © 2011-2022 走看看