Reputation: 1546
I would like to set default value to extra parameter user_id
. I've written filter:
class SystemLogFilter(logging.Filter):
def filter(self, record):
if not record.user_id:
record.user_id = '--'
return True
But I've got this error: AttributeError: 'LogRecord' object has no attribute 'user_id'
How can I get access to user_id
parameter?
This is my logging configuration:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'system_log': {
'format': '%(asctime)-15s - %(levelname)s - %(message)s - %(user_id)s'
},
},
'filters': {
'system2': {
'()': 'system.logging2.SystemLogFilter',
}
},
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': (os.path.join(BASE_DIR, 'logs/system.log')),
'formatter': 'system_log',
'filters': ['system2'],
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'INFO',
},
}
}
Upvotes: 9
Views: 8901
Reputation: 122376
You can use hasattr
(a built-in function) to check whether the log record has the desired attribute. If not, then you can set a default value.
For example:
class SystemLogFilter(logging.Filter):
def filter(self, record):
if not hasattr(record, 'user_id'):
record.user_id = '--'
return True
and then you need to attach this new filter to some logger (for example root
logger) somewhere in your application (preferably the start):
root_logger = logging.getLogger()
root_logger.addFilter(SystemLogFilter())
Upvotes: 18