logging模块
Posted yelublue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logging模块相关的知识,希望对你有一定的参考价值。
import logging # # # logging.warning("user [alex] attempted wrong password more than 3 times") # logging.critical("server is down") logging.basicConfig(filename=‘log_test.log‘, level=logging.DEBUG, format=‘%(asctime)s:%(levelname)s:%(filename)s:%(funcName)s:%(lineno)d:%(process)d %(message)s‘, datefmt=‘%Y-%m-%d %I:%M:%S %p‘) def sayhi(): logging.error("from sayhi....") sayhi() logging.debug(‘This message should go to the log file‘) logging.info(‘So should this‘) logging.warning(‘And this, too‘)
%(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 | 用户输出的消息 |
Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适:
- logger提供了应用程序可以直接使用的接口;
- handler将(logger创建的)日志记录发送到合适的目的输出;
- filter提供了细度设备来决定输出哪条日志记录;
- formatter决定日志记录的最终输出格式。
四个类如何用: import logging class IgnoreBackupLogFilter(logging.Filter): """忽略带db backup 的日志""" def filter(self, record): #固定写法 return "db backup" not in record.getMessage() #1、生成logger对象 logger = logging.getLogger(‘web‘) logger.setLevel(logging.DEBUG)#设置输出级别 # 全局的输出级别是最高的,如果这里设置了,handler就没用了 全局如果不设置的话,就是warning #要让handler有用,全局的级别要设到比handler最低 #1.1 把filter对象添加到logger中 logger.addFilter(IgnoreBackupLogFilter()) #2、生成 handler对象 ch = logging.StreamHandler() #到屏幕的handler ch.setLevel(logging.INFO) #屏幕输出debug级别 fh = logging.FileHandler(‘web.log‘) #到文件的handler fh.setLevel(logging.WARNING) #文件输出warning级别 #2.1 把handler对象绑定到logger logger.addHandler(ch) logger.addHandler(fh) #3、生成formatter对象 file_formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) console_formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(message)s‘) #3.1把formatter对象绑定handler对象 ch.setFormatter(console_formatter) #和handler绑定 fh.setFormatter(file_formatter) logger.debug("test log") logger.info("test log2") logger.info("test db backup log") logger.warning("test log3")
以上是关于logging模块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情