I don't know how to use this new property of python3.2. There, instead of implementing logging.Filter class, one can use a callable.
- I'm trying to use dictConfig for my logger (in python). In that, I want to add a filter such that it will pass if record's message contains certain phrase.
- I know how to do that by implementing logging.Filter class.
- But I don't know how to just use callable 'fancy' property of python 3.2 as stated here
Good code here
class ignore_progress(logging.Filter):
def filter(self, record):
return not ('Progress' in record.getMessage())
class log_progress(logging.Filter):
def filter(self, record):
return ('Progress' in record.getMessage())
def contain_progress(record):
return not ('Progress' in record.message)
logging_dict = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {
"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s",
}
},
"filters": {
"ignore_progress": {
'()': ignore_progress,
}
},
"handlers": {
"default": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "standard",
},
"file": {
"class": "logging.FileHandler",
"level": "DEBUG",
"formatter": "standard",
"filename": 'training_{}.log'.format(str(datetime.date.today())),
"filters": ["ignore_progress"],
},
},
"loggers": {
"": {"handlers": ["default", "file"], "level": "DEBUG", "propagate": True, },
},
}
# Configurate the logger
logging.config.dictConfig(logging_dict)
logger = logging.getLogger(__name__)
logger.info("Run training")
logger.info("Progress.test")
Bad code here
class ignore_progress(logging.Filter):
def filter(self, record):
return not ('Progress' in record.getMessage())
class log_progress(logging.Filter):
def filter(self, record):
return ('Progress' in record.getMessage())
def contain_progress(record):
return not ('Progress' in record.message)
logging_dict = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {
"format": "%(asctime)s [%(levelname)s] %(name)s: %(message)s",
}
},
"filters": {
"ignore_progress": {
'()': contain_progress,
}
},
"handlers": {
"default": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "standard",
},
"file": {
"class": "logging.FileHandler",
"level": "DEBUG",
"formatter": "standard",
"filename": 'training_{}.log'.format(str(datetime.date.today())),
"filters": ["ignore_progress"],
},
},
"loggers": {
"": {"handlers": ["default", "file"], "level": "DEBUG", "propagate": True, },
},
}
# Configurate the logger
logging.config.dictConfig(logging_dict)
logger = logging.getLogger(__name__)
logger.info("Run training")
logger.info("Progress.test")
The above bad code has a problem at this line in config.py