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)sLogger的名字
%(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++的函数耗时以及代码片段耗时详情

python常用代码片段总结

前端开发常用js代码片段

vs code 自定义代码片段

如何有条件地将 C 代码片段编译到我的 Perl 模块?