)]}'
{"foo.log":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8d512845ae030843cbcef016a8a9ed84a18625b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3aaa91ec_f495fe86","updated":"2016-06-23 19:40:53.000000000","message":"Test cruft?","commit_id":"bfdaf9e6eb2887ac9acfd7ba12ebcfd3187f6c1d"}],"oslo_log/log.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"b0a33f7b850aa5337e1ec30cae320a0065b36fb7","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    if (None, \u0027debug\u0027) in fresh:"},{"line_number":233,"context_line":"        _refresh_root_level(conf.debug, conf.verbose)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    if (None, \u0027log-config-append\u0027) in fresh:"},{"line_number":236,"context_line":"        _load_log_config.old_time \u003d 0"},{"line_number":237,"context_line":"    if conf.log_config_append:"},{"line_number":238,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_372cad01","line":236,"range":{"start_line":235,"start_character":0,"end_line":236,"end_character":37},"updated":"2016-03-17 11:16:53.000000000","message":"why do we need that?\nwe set the method attribute to 0 when we call the _load_log_config and then we use the actual value to see if we need to reload the conf, which happens only if the file has been changed","commit_id":"6c48f724ea96366b38549bafd66ffb3b407fc97f"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a431c476aa750eaf7342084417a9e97c01ba5b2d","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    if (None, \u0027debug\u0027) in fresh:"},{"line_number":233,"context_line":"        _refresh_root_level(conf.debug, conf.verbose)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    if (None, \u0027log-config-append\u0027) in fresh:"},{"line_number":236,"context_line":"        _load_log_config.old_time \u003d 0"},{"line_number":237,"context_line":"    if conf.log_config_append:"},{"line_number":238,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_eba8a122","line":236,"range":{"start_line":235,"start_character":0,"end_line":236,"end_character":37},"in_reply_to":"1af94dfe_372cad01","updated":"2016-03-17 11:38:41.000000000","message":"This makes us reload config if log_config_append changes. True, we\u0027d probably reload anyway since the file mtimes are unlikely to be exactly the same, but I\u0027d rather not rely on a technicality like that.","commit_id":"6c48f724ea96366b38549bafd66ffb3b407fc97f"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"86126127dc5be3bb002b51da4cf73cf8abd8d01f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        new_time \u003d os.path.getmtime(log_config_append)"},{"line_number":219,"context_line":"        if _load_log_config.old_time !\u003d new_time:"},{"line_number":220,"context_line":"            logging.config.fileConfig(log_config_append,"},{"line_number":221,"context_line":"                                      disable_existing_loggers\u003dFalse)"},{"line_number":222,"context_line":"            _load_log_config.old_time \u003d new_time"},{"line_number":223,"context_line":"    except (moves.configparser.Error, KeyError, os.error) as exc:"},{"line_number":224,"context_line":"        raise LogConfigError(log_config_append, six.text_type(exc))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_6e116a5d","line":221,"updated":"2016-05-03 20:52:57.000000000","message":"I don\u0027t think this is going to work the way you expect. This flag will cause all existing loggers to continue to log, and then add the new ones. I don\u0027t think that\u0027s what we want if we\u0027re reloading the file-based logging config.\n\nAt the summit last week, we discussed this being especially dangerous, and I\u0027m not convinced it\u0027s something we want to support. We talked about extending the set of options we handle in oslo.log for things like log levels and output formats, where we\u0027re in more control over the logging classes created and know what should be removed vs. updated.","commit_id":"d88474a128c763dbdc4fafd08cc26f05b0a1c5f6"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8d512845ae030843cbcef016a8a9ed84a18625b8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            # does not reset non-child loggers. Take the lock while we do this"},{"line_number":222,"context_line":"            # to avoid another thread logging at the wrong level before we\u0027re"},{"line_number":223,"context_line":"            # finished."},{"line_number":224,"context_line":"            logging._acquireLock()"},{"line_number":225,"context_line":"            try:"},{"line_number":226,"context_line":"                for logger in logging.root.manager.loggerDict.values():"},{"line_number":227,"context_line":"                    logger.level \u003d logging.NOTSET"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_d4e562dc","line":224,"updated":"2016-06-23 19:40:53.000000000","message":"It\u0027s not safe to use this private function.\n\nEach logging handler has its own lock, with a public API, so you could use that to lock them all before modifying the logger\u0027s settings (see the acquire and release methods).\n\nThe fileConfig function locks the global state, so when you\u0027re ready to call that it\u0027s not necessary to do it yourself.","commit_id":"bfdaf9e6eb2887ac9acfd7ba12ebcfd3187f6c1d"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"55fa53f5080b48e41efdfdf33e6b79face9b26e6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            # does not reset non-child loggers. Take the lock while we do this"},{"line_number":222,"context_line":"            # to avoid another thread logging at the wrong level before we\u0027re"},{"line_number":223,"context_line":"            # finished."},{"line_number":224,"context_line":"            logging._acquireLock()"},{"line_number":225,"context_line":"            try:"},{"line_number":226,"context_line":"                for logger in logging.root.manager.loggerDict.values():"},{"line_number":227,"context_line":"                    logger.level \u003d logging.NOTSET"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_2429318a","line":224,"in_reply_to":"3aaa91ec_d4e562dc","updated":"2016-06-29 10:09:04.000000000","message":"Locking handlers doesn\u0027t help, messages will penetrate loggers whose levels should have blocked them and they\u0027ll just wait on the handler locks.\n\nChecking again, this lock doesn\u0027t lock loggers anyway. I\u0027ll just not take it and we\u0027ll have to risk a few extra messages coming through while logging is reconfigured. This is better than temporarily disabling the loggers and risking losing important messages.\n\nI\u0027d love to fix some of this in the logging module itself but precious little chance of merging to Py2.7.","commit_id":"bfdaf9e6eb2887ac9acfd7ba12ebcfd3187f6c1d"}],"oslo_log/tests/unit/test_log.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"6021382d22755c86c1cc6a1031a98037aff8aa22","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        mock_fileConfig.assert_called_once_with("},{"line_number":943,"context_line":"            logini, disable_existing_loggers\u003dFalse)"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def mk_log_config(self, data):"},{"line_number":946,"context_line":"        \"\"\"Turns a dictConfig-like structure into one suitable for fileConfig."},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"        The schema is not validated as this is a test helper not production"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_0a578126","line":945,"updated":"2016-05-17 10:09:06.000000000","message":"went a bit mad here, need to split this out into a separate patch","commit_id":"e38475245f3ae52152b5b5da3cb287ef001fca6b"}],"releasenotes/notes/reload_log_config-743817192b1172b6.yaml":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1cd5f242136f83133ca8ff29d3b7ccd13a5befea","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - When config is reloaded (usually by SIGHUP), if log_config_append is set,"},{"line_number":4,"context_line":"    the logging configuration pointed to will also be reloaded. This can be"},{"line_number":5,"context_line":"    used to, for example, change logger or handler levels."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1aa78d24_71dbc24f","line":5,"updated":"2016-07-06 16:44:47.000000000","message":"How about:\n\n  The log_config_append configuration option is now mutable and the logging\n  settings it controls are reconfigured when the configuration file is reread.","commit_id":"64e32a0a69e60c0671d5401cd3f54400b95f3923"}]}
