logging模块
Posted xuqidong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logging模块相关的知识,希望对你有一定的参考价值。
1 ‘‘‘ 2 import logging 3 4 # 1. 控制日志级别 5 # 2. 控制日志格式 6 # 3. 控制输出的目标为文件 7 logging.basicConfig(filename=‘access.log‘, 8 format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, 9 datefmt=‘%Y-%m-%d %H:%M:%S %p‘, 10 level=10, 11 ) 12 13 logging.debug(‘debug日志‘) # 10 14 logging.info(‘info日志‘) # 20 15 logging.warning(‘warning日志‘) #30 16 logging.error(‘error日志‘)#40 17 logging.critical(‘critical日志‘) #50 18 19 # 火警的级别 20 21 # 大功率电器 22 # 抽烟 23 # 烧烤 24 25 26 27 ‘‘‘ 28 # 1. 能够同时往终端与文件中记录日志 29 # 2. 能够修改字符串编码 30 31 import logging 32 33 # 1. logger对象: 负责生产各种级别的日志 34 logger1 = logging.getLogger(‘用户交易‘) # 日志名用来标识日志的与什么业务有关 35 36 # 2. filter对象: 过滤日志 37 38 # 3. handler对象: 控制日志输出目标位置 39 fh1 = logging.FileHandler(‘a1.log‘,encoding=‘utf-8‘) 40 fh2 = logging.FileHandler(‘a2.log‘,encoding=‘utf-8‘) 41 ch = logging.StreamHandler() 42 43 # 4. formmater对象 44 formatter1 = logging.Formatter( 45 fmt=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, 46 datefmt=‘%Y-%m-%d %H:%M:%S %p‘ 47 ) 48 49 formatter2 = logging.Formatter( 50 fmt=‘%(asctime)s - %(levelname)s : %(message)s‘, 51 datefmt=‘%Y-%m-%d %H:%M:%S %p‘ 52 ) 53 54 # 5. 绑定logger对象与handler对象 55 logger1.addHandler(fh1) 56 logger1.addHandler(fh2) 57 logger1.addHandler(ch) 58 59 # 6. 绑定handler对象与formatter对象 60 61 fh1.setFormatter(formatter1) 62 fh2.setFormatter(formatter1) 63 ch.setFormatter(formatter2) 64 65 # 7. 设置日志级别,有logger对象与handler对象两层关卡,必须都放行最终日志才会放行,通常二者级别相同 66 logger1.setLevel(10) 67 fh1.setLevel(10) 68 fh2.setLevel(10) 69 ch.setLevel(10) 70 71 # 8. 使用logger对象产生日志 72 logger1.info(‘alex给egon转账1个亿‘)
1 standard_format = ‘%(asctime)s - task:%(name)s - %(filename)s:%(lineno)d -‘ 2 ‘ %(levelname)s : [%(message)s]‘ 3 4 simple_format = ‘%(filename)s:%(lineno)d - %(levelname)s : [%(message)s]‘ 5 6 fh1_path = r‘a1.log‘ 7 fh2_path = r‘a2.log‘ 8 9 # log配置字典 10 LOGGING_DIC = { 11 ‘version‘: 1, 12 ‘disable_existing_loggers‘: False, 13 ‘formatters‘: { 14 ‘standard‘: { 15 ‘format‘: standard_format 16 }, 17 ‘simple‘: { 18 ‘format‘: simple_format 19 }, 20 }, 21 ‘filters‘: {}, 22 ‘handlers‘: { 23 #打印到终端的日志 24 ‘ch‘: { 25 ‘level‘: ‘DEBUG‘, 26 ‘class‘: ‘logging.StreamHandler‘, # 打印到终端 27 ‘formatter‘: ‘simple‘ 28 }, 29 #打印到a1.log文件的日志 30 ‘fh1‘: { 31 ‘level‘: ‘DEBUG‘, 32 ‘class‘: ‘logging.FileHandler‘, # 保存到文件 33 ‘formatter‘: ‘standard‘, 34 ‘filename‘: fh1_path, # 日志文件的路径 35 ‘encoding‘: ‘utf-8‘, # 日志文件的编码,再也不用担心中文log乱码了 36 }, 37 # 打印到a2.log文件的日志 38 ‘fh2‘: { 39 ‘level‘: ‘DEBUG‘, 40 ‘class‘: ‘logging.FileHandler‘, # 保存到文件 41 ‘formatter‘: ‘simple‘, 42 ‘filename‘: fh2_path, # 日志文件的路径 43 ‘encoding‘: ‘utf-8‘, # 日志文件的编码,再也不用担心中文log乱码了 44 }, 45 46 }, 47 ‘loggers‘: { 48 ‘‘: { 49 ‘handlers‘: [‘fh1‘, ‘fh2‘, ‘ch‘], 50 ‘level‘: ‘DEBUG‘, 51 }, 52 }, 53 }
1 import logging.config 2 from conf import settings 3 4 def get_logger(name): 5 logging.config.dictConfig(settings.LOGGING_DIC) 6 logger1=logging.getLogger(name) 7 return logger1
以上是关于logging模块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情