-
-
Notifications
You must be signed in to change notification settings - Fork 34.5k
gh-92592: Allow logging filters to return a LogRecord. (GH-92591) #92591
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
3aeeba6
1e4d27f
b526a35
f1ea183
19561d3
14e704d
4d34540
a69e76a
67453f6
b1e1084
f72c594
225329f
735d78a
5e54c77
f52e404
46e2f7f
7a0f470
643551d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -713,6 +713,41 @@ which, when run, produces something like: | |
| 2010-09-06 22:38:15,301 d.e.f DEBUG IP: 123.231.231.123 User: fred A message at DEBUG level with 2 parameters | ||
| 2010-09-06 22:38:15,301 d.e.f INFO IP: 123.231.231.123 User: fred A message at INFO level with 2 parameters | ||
|
|
||
| Imparting contextual information for specific Handlers | ||
| ------------------------------------------------------ | ||
|
|
||
| Each :class:`~Handler` has it's own chain of Filters. | ||
| If you want to add contextual information to a :class:`LogRecord` without leaking | ||
| this contextual information to other handlers, you can use a filter that returns | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You could shorten this contextual information to just it. |
||
| a new :class:`~LogRecord` instead of modifying it in-place: | ||
|
|
||
| script:: | ||
|
|
||
| import logging | ||
|
|
||
| def filter(record: logging.LogRecord): | ||
|
vsajip marked this conversation as resolved.
|
||
| record = logging.LogRecord( | ||
| name=record.name, | ||
| level=record.levelno, | ||
| pathname=record.pathname, | ||
| lineno=record.lineno, | ||
| msg=record.msg, | ||
| exc_info=record.exc_info, | ||
| args=(), | ||
| ) | ||
| record.user = 'jim' | ||
| return record | ||
|
|
||
| if __name__ == '__main__': | ||
| logger = logging.getLogger() | ||
| logger.setLevel(logging.INFO) | ||
| handler = logging.StreamHandler() | ||
| formatter = logging.Formatter('%(message)s from %(user)-8s') | ||
| handler.setFormatter(formatter) | ||
| handler.addFilter(filter) | ||
| logger.addHandler(handler) | ||
|
|
||
| logger.info('A log message') | ||
|
|
||
| .. _multiple-processes: | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -663,8 +663,9 @@ empty string, all events are passed. | |
| .. method:: filter(record) | ||
|
|
||
| Is the specified record to be logged? Returns zero for no, nonzero for | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. After the change, this should be `a 'falsy' value for no, and a 'truthy' value for yes. |
||
| yes. If deemed appropriate, the record may be modified in-place by this | ||
| method. | ||
| yes. Filters can also modify log records in-place or return a completely | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. also -> either |
||
| different log-record which will replace the original log record without | ||
| modifying it. | ||
|
|
||
| Note that filters attached to handlers are consulted before an event is | ||
| emitted by the handler, whereas filters attached to loggers are consulted | ||
|
|
@@ -686,6 +687,12 @@ which has a ``filter`` method with the same semantics. | |
| parameter. The returned value should conform to that returned by | ||
| :meth:`~Filter.filter`. | ||
|
|
||
| .. versionchanged:: 3.12 | ||
| You can now return a :class:`LogRecord` instance from filters to replace | ||
| the log record without modifying it in place. This allows filters installed | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. installed on -> attached to |
||
| on a :class:`Handler` to modify the log record before it is emitted without | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. attached to a handler, not attached to on a handler.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. thank you, corrected |
||
| having side effects on other handlers. | ||
|
|
||
| Although filters are used primarily to filter records based on more | ||
| sophisticated criteria than levels, they get to see every record which is | ||
| processed by the handler or logger they're attached to: this can be useful if | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's should be its - the former is only used as a contraction of it is. Also, no need to capitalise filters here.