)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cecf7168be4e86a3148b62be70d29ce3e45a2982","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Just allow people to provide logging levels for the root logger"},{"line_number":10,"context_line":"and stop trying to mash our own set of verbose or debug or ... to"},{"line_number":11,"context_line":"do the same thing."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9a9ee70ac591bb99f29af2693e184af60d80cfce"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a89bdaa_61fe0d3a","line":12,"updated":"2016-09-09 01:38:15.000000000","message":"This would also fix bug 1620789.","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"}],"oslo_log/_options.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"912e0cd7251cf24a00a5ed8d5e4535ce60835cf3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027log-level\u0027,"},{"line_number":46,"context_line":"               short\u003d\u0027l\u0027,"},{"line_number":47,"context_line":"               ignore_case\u003dTrue,"},{"line_number":48,"context_line":"               choices\u003dsorted(["},{"line_number":49,"context_line":"                   \"WARN\", \"WARNING\", \"ERROR\", \"INFO\", \"DEBUG\", \"TRACE\","},{"line_number":50,"context_line":"                   \"FATAL\", \"CRITICAL\","},{"line_number":51,"context_line":"               ]),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_0fc4f68e","line":48,"updated":"2016-09-07 12:34:20.000000000","message":"why sorted? shouldn\u0027t we manually sort these by log level?","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c0c2b148cc46bd2cb4adcb8d80be3195585721cf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027log-level\u0027,"},{"line_number":46,"context_line":"               short\u003d\u0027l\u0027,"},{"line_number":47,"context_line":"               ignore_case\u003dTrue,"},{"line_number":48,"context_line":"               choices\u003dsorted(["},{"line_number":49,"context_line":"                   \"WARN\", \"WARNING\", \"ERROR\", \"INFO\", \"DEBUG\", \"TRACE\","},{"line_number":50,"context_line":"                   \"FATAL\", \"CRITICAL\","},{"line_number":51,"context_line":"               ]),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_3fe7fa40","line":48,"in_reply_to":"9a89bdaa_0fc4f68e","updated":"2016-09-08 04:39:57.000000000","message":"Ya, thanks for calling me out. I was being lazy :-P","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"912e0cd7251cf24a00a5ed8d5e4535ce60835cf3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                   \"WARN\", \"WARNING\", \"ERROR\", \"INFO\", \"DEBUG\", \"TRACE\","},{"line_number":50,"context_line":"                   \"FATAL\", \"CRITICAL\","},{"line_number":51,"context_line":"               ]),"},{"line_number":52,"context_line":"               help\u003d\u0027Log level to be applied (overrides verbose\u0027"},{"line_number":53,"context_line":"                    \u0027 or debug if both are provided)\u0027),"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_af3f8a85","line":52,"range":{"start_line":52,"start_character":56,"end_line":52,"end_character":63},"updated":"2016-09-07 12:34:20.000000000","message":"femtonit: I\u0027d use \" around the string and \u0027 around verbose and debug.","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c0c2b148cc46bd2cb4adcb8d80be3195585721cf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                   \"WARN\", \"WARNING\", \"ERROR\", \"INFO\", \"DEBUG\", \"TRACE\","},{"line_number":50,"context_line":"                   \"FATAL\", \"CRITICAL\","},{"line_number":51,"context_line":"               ]),"},{"line_number":52,"context_line":"               help\u003d\u0027Log level to be applied (overrides verbose\u0027"},{"line_number":53,"context_line":"                    \u0027 or debug if both are provided)\u0027),"},{"line_number":54,"context_line":"]"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_7fd34260","line":52,"range":{"start_line":52,"start_character":56,"end_line":52,"end_character":63},"in_reply_to":"9a89bdaa_af3f8a85","updated":"2016-09-08 04:39:57.000000000","message":"Will do.","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7319a703b6b276bb38bc7f675002e9858896a45","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                help\u003d\u0027If set to false, the logging level will be set to \u0027"},{"line_number":43,"context_line":"                     \u0027WARNING instead of the default INFO level.\u0027,"},{"line_number":44,"context_line":"                deprecated_for_removal\u003dTrue),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027log-level\u0027,"},{"line_number":46,"context_line":"               short\u003d\u0027l\u0027,"},{"line_number":47,"context_line":"               ignore_case\u003dTrue,"},{"line_number":48,"context_line":"               # These map to the levels in log.py \u0027_NAME_TO_LEVEL\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_aece47b5","line":45,"updated":"2016-09-08 21:57:12.000000000","message":"One issue I have with this versus my CONF.trace option patch here:\n\nhttps://review.openstack.org/#/c/366422/\n\nIs in a change like this:\n\nhttps://review.openstack.org/#/c/366186/6/nova/api/openstack/placement/handlers/allocation.py\n\nIt would be nice to just perform some trace dump first-failure data capture based on a boolean flag. In that nova change we\u0027re going to hit the database and log some stuff at debug (probably trace is better), but we should only do that if it\u0027s going to get logged, else the DB query is unnecessary.\n\nWith this change, to see if we\u0027re logging at trace level I\u0027d have to check if CONF.log_level \u003d\u003d \u0027TRACE\u0027, which is not terrible, but things get weird if we need to compare versions, like if CONF.log_level \u003c x.\n\nMaybe that can be done by checking the int level on the actual logger object? But TRACE isn\u0027t exposed publicly out of oslo.log as far as it\u0027s value (5).","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c4ad8d3358632a3de2b1cd0e7f51afae2b4236fc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                help\u003d\u0027If set to false, the logging level will be set to \u0027"},{"line_number":43,"context_line":"                     \u0027WARNING instead of the default INFO level.\u0027,"},{"line_number":44,"context_line":"                deprecated_for_removal\u003dTrue),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027log-level\u0027,"},{"line_number":46,"context_line":"               short\u003d\u0027l\u0027,"},{"line_number":47,"context_line":"               ignore_case\u003dTrue,"},{"line_number":48,"context_line":"               # These map to the levels in log.py \u0027_NAME_TO_LEVEL\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_4b712877","line":45,"in_reply_to":"9a89bdaa_aece47b5","updated":"2016-09-09 00:05:01.000000000","message":"https://docs.python.org/2/library/logging.html#logging.Logger.isEnabledFor :)","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c1cc7a4f64f6b953fb1f3a7fe5500e49b1231444","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               # These map to the levels in log.py \u0027_NAME_TO_LEVEL\u0027"},{"line_number":49,"context_line":"               # so if you change one here, don\u0027t forget to change it"},{"line_number":50,"context_line":"               # there (we can\u0027t reference that file at the current time"},{"line_number":51,"context_line":"               # because that creates a cycle)."},{"line_number":52,"context_line":"               choices\u003d[\u0027CRITICAL\u0027, \u0027DEBUG\u0027,"},{"line_number":53,"context_line":"                        \u0027ERROR\u0027, \u0027FATAL\u0027, \u0027INFO\u0027, \u0027TRACE\u0027, \u0027WARN\u0027, \u0027WARNING\u0027],"},{"line_number":54,"context_line":"               help\u003d\"Log level to be applied (overrides \u0027verbose\u0027\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_d65c2b4d","line":51,"updated":"2016-09-08 10:40:25.000000000","message":"I wonder if we could move that dict into this file? Bit weird but bearable imo","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"dafc290d5022ea5ee6a05eb5dcece31bd4d00f40","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               # These map to the levels in log.py \u0027_NAME_TO_LEVEL\u0027"},{"line_number":49,"context_line":"               # so if you change one here, don\u0027t forget to change it"},{"line_number":50,"context_line":"               # there (we can\u0027t reference that file at the current time"},{"line_number":51,"context_line":"               # because that creates a cycle)."},{"line_number":52,"context_line":"               choices\u003d[\u0027CRITICAL\u0027, \u0027DEBUG\u0027,"},{"line_number":53,"context_line":"                        \u0027ERROR\u0027, \u0027FATAL\u0027, \u0027INFO\u0027, \u0027TRACE\u0027, \u0027WARN\u0027, \u0027WARNING\u0027],"},{"line_number":54,"context_line":"               help\u003d\"Log level to be applied (overrides \u0027verbose\u0027\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_4222f402","line":51,"in_reply_to":"9a89bdaa_d65c2b4d","updated":"2016-09-08 20:44:58.000000000","message":"I guess we could, let me do that.","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c1cc7a4f64f6b953fb1f3a7fe5500e49b1231444","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               # there (we can\u0027t reference that file at the current time"},{"line_number":51,"context_line":"               # because that creates a cycle)."},{"line_number":52,"context_line":"               choices\u003d[\u0027CRITICAL\u0027, \u0027DEBUG\u0027,"},{"line_number":53,"context_line":"                        \u0027ERROR\u0027, \u0027FATAL\u0027, \u0027INFO\u0027, \u0027TRACE\u0027, \u0027WARN\u0027, \u0027WARNING\u0027],"},{"line_number":54,"context_line":"               help\u003d\"Log level to be applied (overrides \u0027verbose\u0027\""},{"line_number":55,"context_line":"                    \" or \u0027debug\u0027 if both are provided)\"),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_3129e18a","line":53,"updated":"2016-09-08 10:40:25.000000000","message":"TRACE, DEBUG, INFO, WARN, WARNING, ERROR, CRITICAL, FATAL","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"dafc290d5022ea5ee6a05eb5dcece31bd4d00f40","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               # there (we can\u0027t reference that file at the current time"},{"line_number":51,"context_line":"               # because that creates a cycle)."},{"line_number":52,"context_line":"               choices\u003d[\u0027CRITICAL\u0027, \u0027DEBUG\u0027,"},{"line_number":53,"context_line":"                        \u0027ERROR\u0027, \u0027FATAL\u0027, \u0027INFO\u0027, \u0027TRACE\u0027, \u0027WARN\u0027, \u0027WARNING\u0027],"},{"line_number":54,"context_line":"               help\u003d\"Log level to be applied (overrides \u0027verbose\u0027\""},{"line_number":55,"context_line":"                    \" or \u0027debug\u0027 if both are provided)\"),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_821cfcc2","line":53,"in_reply_to":"9a89bdaa_3129e18a","updated":"2016-09-08 20:44:58.000000000","message":"K, that order works for me (and more matches the usage ordering, thx).","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"}],"oslo_log/log.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"912e0cd7251cf24a00a5ed8d5e4535ce60835cf3","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    \"\"\""},{"line_number":355,"context_line":"    log_root \u003d getLogger(None).logger"},{"line_number":356,"context_line":"    if level:"},{"line_number":357,"context_line":"        log_root.setLevel(_NAME_TO_LEVEL[level.upper()])"},{"line_number":358,"context_line":"    elif debug:"},{"line_number":359,"context_line":"        log_root.setLevel(logging.DEBUG)"},{"line_number":360,"context_line":"    elif verbose:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_dfe397d7","line":357,"updated":"2016-09-07 12:34:20.000000000","message":"What if an invalid level is supplied?\n\nnit the repetition of \"log_root.setLevel\" is starting to bug me, maybe we could work out the level then set it at the end:\n\n  level \u003d logging.WARNING\n  if debug:\n    level \u003d logging.DEBUG\n  elif verbose:\n    level \u003d logging.INFO\n  if conflevel in _NAME_TO_LEVEL:\n    level \u003d _NAME_TO_LEVEL[conflevel]\n  getLogger(None).logger.setLevel(level)","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c418320b633d02f2a2196f2a05d78a212a43d1fb","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    \"\"\""},{"line_number":355,"context_line":"    log_root \u003d getLogger(None).logger"},{"line_number":356,"context_line":"    if level:"},{"line_number":357,"context_line":"        log_root.setLevel(_NAME_TO_LEVEL[level.upper()])"},{"line_number":358,"context_line":"    elif debug:"},{"line_number":359,"context_line":"        log_root.setLevel(logging.DEBUG)"},{"line_number":360,"context_line":"    elif verbose:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_3f41e3a9","line":357,"in_reply_to":"9a89bdaa_dfe397d7","updated":"2016-09-07 12:35:30.000000000","message":"Derp:\n\n  level \u003d _NAME_TO_LEVEL.get(conflevel, level)","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c0c2b148cc46bd2cb4adcb8d80be3195585721cf","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    \"\"\""},{"line_number":355,"context_line":"    log_root \u003d getLogger(None).logger"},{"line_number":356,"context_line":"    if level:"},{"line_number":357,"context_line":"        log_root.setLevel(_NAME_TO_LEVEL[level.upper()])"},{"line_number":358,"context_line":"    elif debug:"},{"line_number":359,"context_line":"        log_root.setLevel(logging.DEBUG)"},{"line_number":360,"context_line":"    elif verbose:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_9fd6464d","line":357,"in_reply_to":"9a89bdaa_dfe397d7","updated":"2016-09-08 04:39:57.000000000","message":"I\u0027d be ok with that.","commit_id":"ff7b3a6ce3978a9043f77c3005d55cf8a31d43d0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7319a703b6b276bb38bc7f675002e9858896a45","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"logging.addLevelName(TRACE, \u0027TRACE\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"_NAME_TO_LEVEL \u003d {"},{"line_number":65,"context_line":"    \u0027TRACE\u0027: TRACE,"},{"line_number":66,"context_line":"    \u0027CRITICAL\u0027: CRITICAL,"},{"line_number":67,"context_line":"    \u0027FATAL\u0027: FATAL,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_5308042e","line":64,"updated":"2016-09-08 21:57:12.000000000","message":"Would be good to sort these.","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c4ad8d3358632a3de2b1cd0e7f51afae2b4236fc","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"logging.addLevelName(TRACE, \u0027TRACE\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"_NAME_TO_LEVEL \u003d {"},{"line_number":65,"context_line":"    \u0027TRACE\u0027: TRACE,"},{"line_number":66,"context_line":"    \u0027CRITICAL\u0027: CRITICAL,"},{"line_number":67,"context_line":"    \u0027FATAL\u0027: FATAL,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_2b5ce4ec","line":64,"in_reply_to":"9a89bdaa_5308042e","updated":"2016-09-09 00:05:01.000000000","message":"Sure.","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c1cc7a4f64f6b953fb1f3a7fe5500e49b1231444","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    return getattr(syslog, facility)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"def _refresh_root_level(level, debug, verbose):"},{"line_number":342,"context_line":"    \"\"\"Set the level of the root logger."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    If a valid string log level is provided, we will use that, otherwise"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_9159cd37","line":341,"range":{"start_line":341,"start_character":24,"end_line":341,"end_character":29},"updated":"2016-09-08 10:40:25.000000000","message":"this should be conf_level, or change L351","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7319a703b6b276bb38bc7f675002e9858896a45","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        log_level \u003d logging.INFO"},{"line_number":360,"context_line":"    else:"},{"line_number":361,"context_line":"        log_level \u003d logging.WARNING"},{"line_number":362,"context_line":"    # Do this last so that if an invalid level is provided that at least"},{"line_number":363,"context_line":"    # the other settings will still apply (this value should be restricted"},{"line_number":364,"context_line":"    # to only valid values due to the option in \u0027_options.py\u0027 specifying"},{"line_number":365,"context_line":"    # the allowed strings)."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_2e3957d9","line":362,"range":{"start_line":362,"start_character":33,"end_line":362,"end_character":40},"updated":"2016-09-08 21:57:12.000000000","message":"How can an invalid level be provided when the option is using choices? You get an error if you provide an invalid value on an option that uses the choices kwarg.","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"70f510553e74dbf4bc98eb7e0544d21f39d665de","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        log_level \u003d logging.INFO"},{"line_number":360,"context_line":"    else:"},{"line_number":361,"context_line":"        log_level \u003d logging.WARNING"},{"line_number":362,"context_line":"    # Do this last so that if an invalid level is provided that at least"},{"line_number":363,"context_line":"    # the other settings will still apply (this value should be restricted"},{"line_number":364,"context_line":"    # to only valid values due to the option in \u0027_options.py\u0027 specifying"},{"line_number":365,"context_line":"    # the allowed strings)."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_ad2ba493","line":362,"range":{"start_line":362,"start_character":33,"end_line":362,"end_character":40},"in_reply_to":"9a89bdaa_2e3957d9","updated":"2016-09-09 04:37:05.000000000","message":"Right, I\u0027m thinking I\u0027ll just not do that check, and just assume that this value must be valid (due to how the config is being set..)","commit_id":"be7d82b7e6d6dd905b7692eccc1a9881b5364fe3"}]}
