zoukankan      html  css  js  c++  java
  • 20.logging模块

    
    
    # __________________________________________________
    # 创建一个logger
    logger = logging.getLogger()
    
    logger1 = logging.getLogger('mylogger')
    logger1.setLevel(logging.DEBUG)
    
    logger2 = logging.getLogger('mylogger')
    logger2.setLevel(logging.INFO)
    
    logger3 = logging.getLogger('mylogger.child1')
    logger3.setLevel(logging.WARNING)
    
    logger4 = logging.getLogger('mylogger.child1.child2')
    logger4.setLevel(logging.ERROR)
    
    # root.mylogger.child1.child2.child3
    logger5 = logging.getLogger('mylogger.child1.child2.child3')
    logger5.setLevel(logging.ERROR)
    
    # 创建一个输出文件的handler
    fh = logging.FileHandler("./tmp/test.log")
    
    # 创建一个输出控制台的handler
    ch = logging.StreamHandler()
    
    formatter = logging.Formatter("%(asctime)s-%(lineno)s-%(message)s-%(name)s-%(levelname)s")
    
    # handler设置formtter
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    
    # 定义一个filter
    filter = logging.Filter("mylogger.child1.child2")
    
    # 给handler添加filter
    # fh.addFilter(filter)
    # ch.addFilter(filter)
    
    # 给logger添加handler
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    # 给logger1添加handler
    logger1.addHandler(fh)
    logger1.addHandler(ch)
    
    # 给logger2添加handler
    logger2.addHandler(fh)
    logger2.addHandler(ch)
    
    # 给logger3添加handler
    logger3.addHandler(fh)
    logger3.addHandler(ch)
    
    # 给logger4添加handler
    logger4.addHandler(fh)
    logger4.addHandler(ch)
    
    # 给logger5添加handler
    logger5.addHandler(fh)
    logger5.addHandler(ch)
    
    # 记录一条日志
    logger.debug('logger debug message')
    logger.info('logger info message')
    logger.warning('logger warning message')
    logger.error('logger error message')
    logger.critical('logger critical message')
    
    logger1.debug('logger1 debug message')
    logger1.info('logger1 info message')
    logger1.warning('logger1 warning message')
    logger1.error('logger1 error message')
    logger1.critical('logger1 critical message')
    
    logger2.debug('logger2 debug message')
    logger2.info('logger2 info message')
    logger2.warning('logger2 warning message')
    logger2.error('logger2 error message')
    logger2.critical('logger2 critical message')
    
    logger3.debug('logger3 debug message')
    logger3.info('logger3 info message')
    logger3.warning('logger3 warning message')
    logger3.error('logger3 error message')
    logger3.critical('logger3 critical message')
    
    logger4.debug('logger4 debug message')
    logger4.info('logger4 info message')
    logger4.warning('logger4 warning message')
    logger4.error('logger4 error message')
    logger4.critical('logger4 critical message')
    
    logger5.debug('logger5 debug message')
    logger5.info('logger5 info message')
    logger5.warning('logger5 warning message')
    logger5.error('logger5 error message')
    logger5.critical('logger5 critical message')

    filter: 
    限制只有满足过滤规则的日志才会输出。
         比如我们定义了filter = logging.Filter('a.b.c'),并将这个Filter添加到了一个Handler上,则使用该Handler的Logger中只有名字带          a.b.c前缀的Logger才能输出其日志。
    import logging
    
    logger = logging.getLogger()
    # 创建一个handler,用于写入日志文件
    fh = logging.FileHandler('test.log')
    
    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    
    # 定义一个filter
    filter = logging.Filter('mylogger')
    fh.addFilter(filter)
    ch.addFilter(filter)
    
    # logger.addFilter(filter)
    logger.addHandler(fh)
    logger.addHandler(ch)
    
    
    
    
    logger.setLevel(logging.DEBUG)
    
    logger.debug('logger debug message')
    logger.info('logger info message')
    logger.warning('logger warning message')
    logger.error('logger error message')
    logger.critical('logger critical message')
    
    ##################################################
    logger1 = logging.getLogger('mylogger')
    logger1.setLevel(logging.DEBUG)
    
    logger2 = logging.getLogger('mylogger')
    logger2.setLevel(logging.INFO)
    
    logger1.addHandler(fh)
    logger1.addHandler(ch)
    
    logger2.addHandler(fh)
    logger2.addHandler(ch)
    
    logger1.debug('logger1 debug message')
    logger1.info('logger1 info message')
    logger1.warning('logger1 warning message')
    logger1.error('logger1 error message')
    logger1.critical('logger1 critical message')
    
    logger2.debug('logger2 debug message')
    logger2.info('logger2 info message')
    logger2.warning('logger2 warning message')
    logger2.error('logger2 error message')
    logger2.critical('logger2 critical message')
     1 # 日志
     2 import logging
     3 # __________________________#basicConfig   设置日志的配置
     4 logging.basicConfig(
     5     level=logging.DEBUG,    # 打印级别
     6     # filename="logger.log",   # 打印哪个目录
     7     filemode="w",   # 覆盖
     8     format="%(name)s-%(asctime)s-[%(lineno)d]-%(message)s-%(filename)s",    # 输出的日志信息
     9     stream=open("logger.log", "w")  
    10 )
    11 
    12 logging.debug("debug messages")
    13 logging.info("info message")
    14 logging.warning("warning message")
    15 logging.error("error message")
    16 logging.critical("critical message")
    17 
    18 
    19 # _________________________#logger  # 将日志封装
    20 def logger():
    21     logger = logging.getLogger()
    22 
    23     fh = logging.FileHandler("test_log")  # 文件里面发送内容  文件处理器
    24     ch = logging.StreamHandler()  # 文件控制台发送内容    控制台处理器
    25 
    26     fm = logging.Formatter("%(asctime)s-%(message)s")  # 格式
    27 
    28     fh.setFormatter(fm)  # 输出设置格式  
    29     ch.setFormatter(fm)
    30 
    31     logger.addHandler(fh)  # 添加handler
    32     logger.addHandler(ch)
    33     logger.setLevel("DEBUG")   # 设置级别
    34     return logger
    35 
    36 # # _______________________#
    37 #
    38 #
    39 logger.debug("debug")
    40 logger.info("info")
    41 logger.warning("warning")
    42 logger.error("error")
    43 logger.critical("critical")
    44 # # _________________________#
    45 
    46 import logging
    47 logger = logging.getLogger()   # 获取日志对象
    48 # logger.setLevel(logging.INFO)
    49 
    50 # 同一个logger名字,创建的是同一个对象
    51 logger1 = logging.getLogger("mylogger")   # 日志名称 
    52 logger1.setLevel(logging.DEBUG)
    53 
    54 logger2 = logging.getLogger("mylogger.sontree")   
    55 logger2.setLevel(logging.INFO)
    56 
    57 fh = logging.FileHandler("test_log_new")  # 文件里面发送内容
    58 ch = logging.StreamHandler()  # 文件控制台发送内容
    59 
    60 fm = logging.Formatter("%(message)s-%(asctime)s")
    61 
    62 fh.setFormatter(fm)
    63 ch.setFormatter(fm)
    64 
    65 # logger.addHandler(fh)
    66 # logger.addHandler(ch)
    67 
    68 logger1.addHandler(fh)
    69 logger1.addHandler(ch)
    70 
    71 logger2.addHandler(fh)
    72 logger2.addHandler(ch)
    73 
    74 
    75 # logger.debug("logger debug")
    76 # logger.info("logge info")
    77 # logger.warning("logger warning")
    78 # logger.error("logger error")
    79 # logger.critical("logger critical")
    80 
    81 logger1.debug("logger1 debug")
    82 logger1.info("logger1 info")
    83 logger1.warning("logger1 warning")
    84 logger1.error("logger1 error")
    85 logger1.critical("logger1 critical")
    86 
    87 # logger2.debug("logger2 debug")
    88 # logger2.info("logger2 info")
    89 # logger2.warning("logger2 warning")
    90 # logger2.error("logger2 error")
    91 # logger2.critical("logger2 critical")

    https://www.cnblogs.com/yuanchenqi/articles/5732581.html  各种包文章

    https://www.cnblogs.com/wupeiqi/articles/5501365.html  这个里面的logging更详细

    format参数中可能用到的格式化串:
    %(name)s Logger的名字
    %(levelno)s 数字形式的日志级别
    %(levelname)s 文本形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    %(filename)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用户输出的消息

  • 相关阅读:
    自己写的一个校验IP、IP掩码、IP段的方法
    JS 数组方法splice的源码探究
    element ui 的时间选择控件
    浅谈闭包
    tensorFlow-深度学习训练并行模式
    tensorflow-TensorBoard
    tensorflow-RNN和LSTM
    tensorflow-TFRecord报错ValueError: Protocol message Feature has no "feature" field.
    tensorflow-mnist报错[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法
    旋转图片,增加神经网络的准确率
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/11084853.html
Copyright © 2011-2022 走看看