)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"980db34b08f1807a19f99b99b38b397218327411","unresolved":false,"context_lines":[{"line_number":11,"context_line":"exc_text used to cache this output. So we use handler formatter to get"},{"line_number":12,"context_line":"string from exc_info and send it as EXCEPTION_INFO."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Also adds type validation for journal.send fields. Known types could be"},{"line_number":15,"context_line":"gotten from journal.DEFAULT_CONVERTERS. The rest payload must be either"},{"line_number":16,"context_line":"a string or bytes."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_557a5427","line":14,"updated":"2018-11-29 21:12:48.000000000","message":"Oh, I see, this is in the tests. I was expecting to see something in the formatter. :-)","commit_id":"08009015fde613750e30bbd1d1d469cedd1ead6b"}],"oslo_log/handlers.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"f6ddda6a8875a9a89d97da930593d2bdb31885df","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                if self.formatter:"},{"line_number":139,"context_line":"                    fmt \u003d self.formatter"},{"line_number":140,"context_line":"                else:"},{"line_number":141,"context_line":"                    fmt \u003d logging._defaultFormatter"},{"line_number":142,"context_line":"                record.exc_text \u003d fmt.formatException(record.exc_info)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if record.exc_text:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_764c853f","line":141,"range":{"start_line":141,"start_character":34,"end_line":141,"end_character":51},"updated":"2018-11-08 16:44:57.000000000","message":"We shouldn\u0027t be referencing private members of other modules. Can we just use logging.Formatter?","commit_id":"278815827cd8a8de4cfaa355775e3a1473e5957d"},{"author":{"_account_id":9701,"name":"Nikita Gerasimov","email":"nikita.gerasimov@oracle.com","username":"nikitych"},"change_message_id":"6816e4aa8933f01eb9299831ff311150246ccf01","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                if self.formatter:"},{"line_number":139,"context_line":"                    fmt \u003d self.formatter"},{"line_number":140,"context_line":"                else:"},{"line_number":141,"context_line":"                    fmt \u003d logging._defaultFormatter"},{"line_number":142,"context_line":"                record.exc_text \u003d fmt.formatException(record.exc_info)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if record.exc_text:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_69b7ca23","line":141,"range":{"start_line":141,"start_character":34,"end_line":141,"end_character":51},"in_reply_to":"3f79a3b5_764c853f","updated":"2018-11-08 17:13:42.000000000","message":"Actually \"if self.formatter\" is unnecessary because we already  call self.format() earlier in a function so self.formatter can\u0027t be None","commit_id":"278815827cd8a8de4cfaa355775e3a1473e5957d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b1489093c5d3528a105444e05e6846b316405e17","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                    record.exc_info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if record.exc_text:"},{"line_number":142,"context_line":"            extras[\u0027EXCEPTION_INFO\u0027] \u003d record.exc_text"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        for field in self.custom_fields:"},{"line_number":145,"context_line":"            value \u003d record.__dict__.get(field)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5de88413","line":142,"updated":"2018-11-08 20:26:16.000000000","message":"This is now no longer the exception info, so anything that would have been trying to consume it is going to break. We\u0027re also no longer setting EXCEPTION_TEXT in the extras, so anything looking for that would break.\n\nI think we want to leave line 142 as it was, and just insert what you have on 135-139 before the old 135. That introduces the new handling of ensuring there is some text, without breaking the way we were handling info.","commit_id":"08009015fde613750e30bbd1d1d469cedd1ead6b"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"980db34b08f1807a19f99b99b38b397218327411","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                    record.exc_info)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if record.exc_text:"},{"line_number":142,"context_line":"            extras[\u0027EXCEPTION_INFO\u0027] \u003d record.exc_text"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        for field in self.custom_fields:"},{"line_number":145,"context_line":"            value \u003d record.__dict__.get(field)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b5b3a8eb","line":142,"in_reply_to":"3f79a3b5_5de88413","updated":"2018-11-29 21:12:48.000000000","message":"+1. We\u0027re essentially duplicating the stdlib logic around exc_info, but in the interest of maintaining the extras fields I think that\u0027s okay. This would fix the bug without breaking compatibility.\n\nIf we want to discuss removing this redundant information then we can do that as a followup. Once the bug is fixed we can take our time and figure out how/if we want to do that.","commit_id":"08009015fde613750e30bbd1d1d469cedd1ead6b"}]}
