Python logging 模块详述(3)

Filter对象初始化需要指定过滤logger名,只有指定的logger名所产生的LogRecord才会通过该filter,不然会被它过滤掉。logger名过滤是指不会过滤指定logger名及其子logger。

LogRecord

日志内容的载体。
LogRecord的实例都是通过Logger对象的方法实例的
LogRecord的主要分类就是在日志级别上的分类,分为DEBUG,INFO,WARNING,ERROR,CRITICAL

读取logging配置

以后遇到了再来完善。

还是贴点实践代码吧

import logging

logging.basicConfig(filename='logging_train.log',level=logging.DEBUG)
logger1 = logging.getLogger('1')
logger2 = logger1.getChild('2')  # logger2继承于logger1:即会是1.2
logger2.propagate = True  # 是否向上传递LogRecord对象

class myfilter(logging.Filter):  # 定义自己的Filter类

def__init__(self, s):  # 过滤所有不包含指定字符串的日志
        self.filter_string = s

deffilter(self, red):  # logger和handler会调用这个方法判定过滤结果。
        if self.filter_string in red.getMessage():
            return True
        else:
            return False


filter1 = myfilter('world')


handler1 = logging.FileHandler('logging_train1.log')
handler2 = logging.StreamHandler()

formatter1 = logging.Formatter('%(asctime)s%(name)s%(threadName)s%(process)s%(levelname)s%(message)s')

handler2.setFormatter(formatter1)

logger1.addHandler(handler1)

logger2.addHandler(handler2)

logger2.addFilter(filter1)
logger2.setLevel(logging.CRITICAL)
logger2.error("hello world!")
logger2.critical("Python is the best all over the world!")

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6375a23318a4f54e75a71b6d6113a6c5.html