zoukankan      html  css  js  c++  java
  • 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() 时,会把内容多打印一遍

      

    一个奋斗中的产品小白
  • 相关阅读:
    Revit 二次开发 交互及UIAPI之TaskDialog
    Revit 二次开发 交互及UIAPI之Selection
    Revit 二次开发 元素创建与修改练习
    编译带libev和libuv的libwebsocket (Win平台)
    sqlite3存储格式
    MAC OS下编译apple跨平台的libevent库 (可延申到其它第三库)
    Unix, Linux以及NT内核和它们各自衍生的系统关系图
    简单地迁移你的android jni代码逻辑到iOS
    使用ndk交叉编译android各平台版本的第三方库
    使用Android Studio进行ndk开发的准备
  • 原文地址:https://www.cnblogs.com/dabai123/p/11384999.html
Copyright © 2011-2022 走看看