zoukankan      html  css  js  c++  java
  • Python之日志处理(logging模块二实战)

    实战篇

     1 import logging
     2 import logging.handlers
     3 
     4 LOG_PATH = r'./'
     5 
     6 def logConfig_1():
     7     '''
     8     配置 log 输出到文件 : fileName 中
     9     '''
    10     fileName = LOG_PATH + r"\%s.txt"%getlogname()
    11     #print(lfname)
    12     logformat='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
    13     logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别
    14                     filename=fileName,
    15                     filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志
    16                     #a是追加模式,默认如果不写的话,就是追加模式
    17                     format=logformat
    18                     #日志格式
    19                     )
    20     print('logConfig_2配置完成')
    21 #logConfig_1()#配置log
    22 
    23 def logConfig_2():
    24     '''
    25     配置 log 输出到文件 和 控制台:
    26     即 需要2个处理器:
    27         1-输出到文件
    28         2-输出到控制台
    29     '''
    30     logfilename = LOG_PATH + r"\%s.txt"%getlogname()
    31     logformat_1='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
    32     
    33     
    34     #获取日志器 Logger ,并取名 'mylogger'
    35     logger = logging.getLogger('mylogger')
    36     logger.setLevel(logging.DEBUG)#统一设置log打印级别
    37     logger.handler = []
    38     
    39     #创建处理器 Handler:fileHandler、streamHandler
    40     fileHandler = logging.FileHandler(logfilename)#输出到文件
    41     fileHandler.setFormatter(logging.Formatter(logformat_1))
    42     
    43     streamHandler = logging.StreamHandler()#输出到控制台
    44     streamHandler.setLevel(logging.ERROR)#可单独对handler设置log打印级别
    45     logformat_2=' %(name)s-%(asctime)s - %(module)s-%(funcName)s[line:%(lineno)d] - %(levelname)s: %(message)s'
    46     streamHandler.setFormatter(logging.Formatter(logformat_2))
    47     
    48     #将处理器添加到日志器中
    49     logger.addHandler(fileHandler)
    50     logger.addHandler(streamHandler)
    51     
    52     print('logConfig_2配置完成')
    53     return logger
    54 #全局变量
    55 logger = logConfig_2()#配置log,在其他模块中引用的时候直接运用logger,不能再次创建
    56 
    57 def getlogname():
    58     logfilename = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
    59     return logfilename                   
    60                     
    61 
    62 if __name__ == '__main__':
    63     #logging.debug('debug message %s - %d ......','hello', 1)
    64 
    65     logger.debug('debug message')
    66     logger.info('info message')
    67     logger.warning('warning message')
    68     logger.error('error message')
    69     logger.critical('critical message')

    其他模块中引用:

     1 import logging
     2 import loggingtest1
     3 from logConfig import *
     4 
     5 #logger = logConfig_2()  #不能重新获取,否则会多次打印
     6 logger.debug('debug message')
     7 logger.info('info message')
     8 logger.warning('warning message')
     9 logger.error('error message')
    10 logger.critical('critical message')
    11 
    12 loggingtest1.test()
     1 import logging
     2 from logConfig import *
     3 
     4 #logger = logConfig_2()  #同样不能调用该函数,否则会重复打印,调用n
     5 次打印+n次
     6 
     7 def test():
     8     flag = 'test1-test'
     9     logger.debug('debug message%s',flag)
    10     logger.info('info message%s',flag)
    11     logger.warning('warning message%s',flag)
    12     logger.error('error message%s',flag)
    13     logger.critical('critical message%s',flag)

    注意:不能多次创建处理器(handler),否则会打印+n次,解决办法就是定义全局变量,使用同一个logger去打印

  • 相关阅读:
    浅释一下,为什么要使用接口?
    枚举的简单使用
    最富有的人
    拜读websharp时,发现的几处问题(二)
    如何规划职业发展道路如何规划职业发展道路(ZT)
    在.NET环境中使用单元测试工具NUnit(ZT)
    [转贴]不得不知的几个可怕信息!
    ASP.NET中数据导入至Excel
    拜读websharp时,发现的几处问题(一)
    合并DataGrid相同单元格
  • 原文地址:https://www.cnblogs.com/yaner2018/p/11477528.html
Copyright © 2011-2022 走看看