• python课堂整理30---- logger模块


    logger模块,关于日志的一系列操作

    两种使用方法

    一、

    import logging
    
    logging.basicConfig(
        level = logging.DEBUG, #设置级别
        filename = "logger.log", #写入文件
        filemode = "w", #不写这句默认为追加的模式
        format = "%(asctime)s %(filename)s %(lineno)d %(message)s" #分别设置时间、文件名、程序位置、日志内容
    )
    
    logging.debug("debug message")
    logging.info("info message")
    logging.warning("warning message")
    logging.error("error message")
    logging.critical('critical message')
    

     

    format 参数中可能用到的格式化串:

    %(name)s Logger的名字

    %(levelno)s 数字形式的日志级别

    %(levename)s文本形式的日志级别

    %(filename)s 调用日志输出函数的模块的文件名

    %(pathname)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用户输出的消息

    二、

    import logging
    def logger():
        logger = logging.getLogger() #不写参数默认为root用户
    
        fh = logging.FileHandler("TEST_log")  #这里参数为文件名或路径,向文件输入内容
        ch = logging.StreamHandler() #向屏幕输入内容
    
        fm = logging.Formatter("%(asctime)s %(message)s)")  #设置格式
    
        fh.setFormatter(fm)  #加入格式
        ch.setFormatter(fm)  #加入格式
    
        logger.addHandler(fh)  #把fh功能加入logger对象
        logger.addHandler(ch)  #把ch功能加入logger对象
        logger.setLevel("DEBUG") #设置级别
        return logger
    
    logger = logger()  #调用函数
    
    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")
    logger.critical("critical")
    
    import logging
    # def logger():
    logger1 = logging.getLogger("mylogger")#不写参数默认为root用户
    logger1.setLevel("DEBUG")
    logger2 = logging.getLogger("mylogger")
    logger2.setLevel("INFO")
    
    fh = logging.FileHandler("my_new.log")  #这里参数为文件名或路径,向文件输入内容
    ch = logging.StreamHandler() #向屏幕输入内容
    
    fm = logging.Formatter("%(asctime)s %(message)s)")  #设置格式
    
    fh.setFormatter(fm)
    ch.setFormatter(fm)
    
    logger1.addHandler(fh)
    logger2.addHandler(fh)
    logger1.addHandler(ch)
    logger2.addHandler(ch)
    
        # return logger
    
    # logger1 = logger()
    
    logger1.debug("debug1")
    logger1.info("info1")
    logger1.warning("warning1")
    logger1.error("error1")
    logger1.critical("critical1")
    
    logger2.debug("debug2")
    logger2.info("info2")
    logger2.warning("warning2")
    logger2.error("error2")
    logger2.critical("critical2")
    

     

    上面代码中,logger1和logger2中设置的级别不一样,但是输出的级别却是一样

    因为用户参数用的都是 mylogger, 下面设置的级别把上面的覆盖了

    特殊情况:

    mport logging
    # def logger():
    logger = logging.getLogger()
    logger1 = logging.getLogger("mylogger")#不写参数默认为root用户
    # logger.setLevel("DEBUG")
    # logger1.setLevel("DEBUG")
    
    fh = logging.FileHandler("my_new.log")  #这里参数为文件名或路径,向文件输入内容
    ch = logging.StreamHandler() #向屏幕输入内容
    
    fm = logging.Formatter("%(asctime)s %(message)s)")  #设置格式
    
    fh.setFormatter(fm)
    ch.setFormatter(fm)
    
    logger1.addHandler(fh)
    logger.addHandler(fh)
    logger1.addHandler(ch)
    logger.addHandler(ch)
    
    logger.debug("debug")
    logger.info("info")
    logger.warning("warning")
    logger.error("error")
    logger.critical("critical")
    
    logger1.debug("debug1")
    logger1.info("info1")
    logger1.warning("warning1")
    logger1.error("error1")
    logger1.critical("critical1")
    

    当logger1里有参数,而且检测到有logger() 时,会把内容多打印一遍

      

    一个奋斗中的产品小白
  • 相关阅读:
    Android属性动画ObjectAnimator的使用1
    通过Android反编译技术研究国内陌生人社交即时通讯的技术方案
    滴滴出行开源项目doraemonkit食用指南
    Android开发利器之pidcat
    Spinner在Dialog中的使用效果
    python抓取知识星球精选帖,制作为pdf文件
    [设计模式]观察者模式
    C语言实现进度条
    [设计模式]策略模式
    线程链表与线程切换
  • 原文地址:https://www.cnblogs.com/dabai123/p/11384999.html
Copyright © 2020-2023  润新知