Filter对象初始化需要指定过滤logger名,只有指定的logger名所产生的LogRecord才会通过该filter,不然会被它过滤掉。logger名过滤是指不会过滤指定logger名及其子logger。
LogRecord日志内容的载体。
LogRecord的实例都是通过Logger对象的方法实例的
LogRecord的主要分类就是在日志级别上的分类,分为DEBUG,INFO,WARNING,ERROR,CRITICAL
以后遇到了再来完善。
还是贴点实践代码吧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!")