)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfee5eb3b134b9b440b2dcce4f1a644b2562f12a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Shreeya Deshpande \u003cshreeyad@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-10-01 16:14:09 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Kill inheritance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":10,"context_line":"- SwiftLogAdapter is now Swift\u0027s LogAdapter"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"44a91eb9_b76ec8ba","line":7,"updated":"2024-10-02 08:56:06.000000000","message":"I think it would be helpful for the subject line to mention PrefixLoggerAdapter. In fact it could even be\n\n```\nRemove PrefixLoggerAdapter and SwiftLoggerAdapter\n```\n\n...then the body could say why (it\u0027s not necessary, adds complexity etc)","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shreeya Deshpande \u003cshreeyad@nvidia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-10-01 16:14:09 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Kill inheritance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":10,"context_line":"- SwiftLogAdapter is now Swift\u0027s LogAdapter"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e7fdbdba_3ff1ee83","line":7,"in_reply_to":"44a91eb9_b76ec8ba","updated":"2024-10-03 12:37:22.000000000","message":"Acknowledged","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfee5eb3b134b9b440b2dcce4f1a644b2562f12a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Kill inheritance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":10,"context_line":"- SwiftLogAdapter is now Swift\u0027s LogAdapter"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"40b0673a_be1a07cd","line":10,"updated":"2024-10-02 08:56:06.000000000","message":"I think this saying \"Rename LogAdapter to SwiftLogAdapter\" 😊","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Kill inheritance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":10,"context_line":"- SwiftLogAdapter is now Swift\u0027s LogAdapter"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"183e5709_01c3bdf4","line":10,"in_reply_to":"40b0673a_be1a07cd","updated":"2024-10-03 12:37:22.000000000","message":"Acknowledged","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c143258150618eeb78a49662e3c9452d1368e8e","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Rename LogAdapter to SwiftLogAdapter"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"2e46feac_d484aa93","line":9,"updated":"2024-10-03 18:34:32.000000000","message":"this message describes the what more than the WHY, perhaps better as:\n\n\u003e Remove PrefixLoggerAdapter and SwiftLoggerAdapter\n\u003e \n\u003e In order to modernize swift\u0027s statsd configuration we\u0027re working to separate it from logging.  This change is a pre-requisite for the Related-Change in order to simplfy the stdlib base logger instance wrapping in a single extended SwiftLogAdapter which supports all the features swift\u0027s servers/daemons need from our logger instance interface.\n\u003e \n\u003e Related-Change-Id: I408ddb69e7f9122905c66b94b6b63ba9628eb4d9","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove PrefixLoggerAdapter and SwiftLoggerAdapter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Rename LogAdapter to SwiftLogAdapter"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"29a29981_beb8ec04","line":9,"in_reply_to":"2e46feac_d484aa93","updated":"2024-10-03 19:23:11.000000000","message":"Acknowledged","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57eff4c67738ea98538f330a81511d0899a02cff","unresolved":true,"context_lines":[{"line_number":9,"context_line":"In order to modernize swift\u0027s statsd configuration we\u0027re working to"},{"line_number":10,"context_line":"separate it from logging. This change is a pre-requisite for the"},{"line_number":11,"context_line":"Related-Change in order to simplfy the stdlib base logger instance"},{"line_number":12,"context_line":"wrapping in a single extended SwiftLogAdapter which supports all the"},{"line_number":13,"context_line":"features swift\u0027s servers/daemons need from our logger instance interface."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Related-Change-Id: I408ddb69e7f9122905c66b94b6b63ba9628eb4d9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"0f38168e_f360c372","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":45},"updated":"2024-11-05 19:58:13.000000000","message":"Née `LogAdapter` -- should we call out the rename, too?","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In order to modernize swift\u0027s statsd configuration we\u0027re working to"},{"line_number":10,"context_line":"separate it from logging. This change is a pre-requisite for the"},{"line_number":11,"context_line":"Related-Change in order to simplfy the stdlib base logger instance"},{"line_number":12,"context_line":"wrapping in a single extended SwiftLogAdapter which supports all the"},{"line_number":13,"context_line":"features swift\u0027s servers/daemons need from our logger instance interface."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Related-Change-Id: I408ddb69e7f9122905c66b94b6b63ba9628eb4d9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"b6d2b7e5_c41dffae","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":45},"in_reply_to":"0f38168e_f360c372","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":13,"context_line":"which supports all the features swift\u0027s servers/daemons need"},{"line_number":14,"context_line":"from our logger instance interface."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Related-Change-Id: I408ddb69e7f9122905c66b94b6b63ba9628eb4d9"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"514f96c3_a82e146a","line":16,"updated":"2024-11-13 12:47:40.000000000","message":"this patch has been abandoned, we\u0027re now working on I44694b92264066ca427bb96456d6f944e09b31c0\n\nAlso, the tag is just ``Related-Change:``  (which has always struck me as odd to not have the ``Id`` part but that\u0027s how it seems to be!)\n\nI think it is unusual to *forward* reference a related change, and perhaps unwise because things often change (as in this case). On the other hand, it can be useful to see historically where a change was leading.","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7421ca3480a3b7b14734c91edd7510419ee8276b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"which supports all the features swift\u0027s servers/daemons need"},{"line_number":14,"context_line":"from our logger instance interface."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Related-Change-Id: I408ddb69e7f9122905c66b94b6b63ba9628eb4d9"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I8988c0add6bb4a65cc8be38f0bf527f141aac48a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"d2ad10dd_3aac4b39","line":16,"in_reply_to":"514f96c3_a82e146a","updated":"2024-11-13 20:55:38.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfee5eb3b134b9b440b2dcce4f1a644b2562f12a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"24b9c8f4_9a135e69","updated":"2024-10-02 08:56:06.000000000","message":"Thanks for breaking this out Shreeya","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a44426a7_9a018dfa","updated":"2024-10-03 17:51:38.000000000","message":"I\u0027m curious about the py2 error you saw with the set_prefix change because we\u0027re not casting str to bytes or vice versa in set_prefix? Are you able to reproduce a traceback?\n\nIt would be great if you could update the docstrings in a few places 😊","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c143258150618eeb78a49662e3c9452d1368e8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3a319121_232ad5b7","updated":"2024-10-03 18:34:32.000000000","message":"please reword the SwiftLogAdapter wrapping relinker and update the commit message.","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9bf59170455a5961165b53d4fef70c10a134df73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f9544ac6_7f008cfc","updated":"2024-10-03 22:27:31.000000000","message":"-1 mainly for the auditor -- pretty sure each watcher really does need its own adapter instance.","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc45dbb4a19f910340ba78e6d6c4eacb6b847753","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ab6542ac_f046b6a2","updated":"2024-10-04 09:42:46.000000000","message":"I think we can address the default prefix \u003d \u0027\u0027 issue, see https://review.opendev.org/c/openstack/swift/+/931374\n\nThe audit watcher issue is tricky :/","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"79665857_38b79ae9","updated":"2024-10-08 18:10:43.000000000","message":"It\u0027s been suggested that:\n\n```\nlogger \u003d SwiftLogAdapter(logger)\nlogger.set_prefix(...)\n```\n\nIs a dangerous/long-winded way to say:\n\n```\nlogger \u003d get_prefixed_logger(logger, prefix\u003d...)\n```\n\nI think the `set_prefix` pattern; as with with statsd\u0027s deprecated `set_prefix` method, is prone to the kind of bugs we had in an earlier version of this patch (where we called set_prefix on the passed in logger and mutated the nonlocal).\n\nHowever, I\u0027m not sure we can/should attempt to fix that in this patch.\n\nWe may however want to try \"fixing\" the inline mutation slightly differently in-order to maintain backwards compat witht he PrefixLogAdapter\u0027s statsd handling:\n\n```\n- logger \u003d PrefixedLogAdapter(logger)\n+ logger \u003d SwiftLogAdapter(logger.logger)\n```\n\ni.e.\n\n```\ndiff --git a/swift/obj/auditor.py b/swift/obj/auditor.py\nindex 29a2dfde7..e44f7108f 100644\n--- a/swift/obj/auditor.py\n+++ b/swift/obj/auditor.py\n@@ -497,8 +497,9 @@ class WatcherWrapper(object):\n     def __init__(self, watcher_class, watcher_name, conf, logger):\n         self.watcher_name \u003d watcher_name\n         self.watcher_in_error \u003d False\n-        self.logger \u003d SwiftLogAdapter(logger, {})\n+        self.logger \u003d SwiftLogAdapter(logger.logger, {})\n         self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)\n+        self.logger.increment(\u0027test\u0027)\n \n         try:\n             self.watcher \u003d watcher_class(conf, self.logger)\ndiff --git a/test/unit/obj/test_auditor.py b/test/unit/obj/test_auditor.py\nindex 9a2c6aeb6..b55b161a8 100644\n--- a/test/unit/obj/test_auditor.py\n+++ b/test/unit/obj/test_auditor.py\n@@ -1697,7 +1697,7 @@ class TestAuditWatchers(TestAuditorBase):\n \n         self.assertEqual(calls[0], [\"__init__\", conf, mock.ANY])\n         self.assertIsInstance(calls[0][2], SwiftLogAdapter)\n-        self.assertIs(calls[0][2].logger, self.logger)\n+        self.assertIs(calls[0][2].logger, self.logger.logger)\n \n         self.assertEqual(calls[1], [\"start\", \"ZBF\"])\n \n```","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8d8c2d3e81ec63e4f67c5a327f6aaaab18c468c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c916f122_ca00a144","updated":"2024-10-14 18:06:35.000000000","message":"we\u0027ve been left quite a mess to maintain in get_logger :\u0027(\n\nbut apart from the custom log handler thing this is looking good 😊","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2e0ad2c4_7012251c","updated":"2024-10-16 18:04:35.000000000","message":"this is so fun!","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"68eeb1e2_50f2447c","updated":"2024-10-24 10:57:30.000000000","message":"There\u0027s a bug in the call to SwiftLogAdapter in relinker.py. That perhaps reveals a lack of test coverage that might be worth exploring.\n\nThere\u0027s some comments that have been lost that I think are worth keeping.\n\nOtherwise there\u0027s just some cleanup suggestions. In principle this is looking good.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a62e5efa6ba33e5c8876e76c86a27f4721c6c39b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"2072765f_971184e0","updated":"2024-10-25 11:33:20.000000000","message":"I think the test name ``test_get__prefixed_logger`` should be changed. \n\nOtherwise I only have nits, but since you\u0027ll need to push another patchset I think it would at least be worth also fixing the docstring bullet list. You could copy the change I made here https://review.opendev.org/c/openstack/swift/+/933411/1/swift/common/utils/logs.py but I suggest that you do NOT squash the docs change from that patch into here. Let\u0027s keep the source docs fixes for another patch.","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"648b6d0afa334718bd89043f8fde15f97224f9f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"9d8d4002_7888839d","updated":"2024-10-25 02:36:18.000000000","message":"recheck\n\npy38 should be happy now.","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"34cfe9f459aa9a5538d7e69eb563ee86b4ac04aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"51ad75e4_3e875644","updated":"2024-10-25 21:18:58.000000000","message":"LGTM!","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7708ebc7680e39d2a40c8cdf88f8de4d2618c71f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5022210a_79d80e6f","updated":"2024-10-25 15:18:44.000000000","message":"recheck","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"8f4b0daee54ec28ec3cd61d28db985323ca1ab75","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"69d5f2d6_603a8427","updated":"2024-10-28 15:50:18.000000000","message":"recheck","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"b481ff37e95b2cf7013d43bb77ab96e04372d819","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"c8445caf_a36abe6d","updated":"2024-10-25 17:09:38.000000000","message":"recheck","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b46fe3a29ca40faf2e18186f21986d19042cc105","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"44ef9cf7_ca4bf70c","updated":"2024-10-25 16:16:35.000000000","message":"there\u0027s been a lot of input and churn from various reviewers on this patch so I think it would be good to have at least one more +2 before merging","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"c4a755f5_b06e62d3","updated":"2024-11-05 18:34:53.000000000","message":"I\u0027m holding off a +A because I actually think there\u0027s some weirdness in *tests* that\u0027s probably worth fixing before we merge rather than in a follow-up:\n\nBasically, I think:\n\n    SwiftLogAdapter(get_logger())\n    \n... should always be a smell, since when you look at `get_prefixed_logger` you can clearly see the expected usage is:\n\n    SwiftLogAdapter(get_logger().logger)\n    \nusing the `__init__` signature *correctly* has the benefit of making the statsd delegate methods actually *work* (as opposed to a runtime AttributeError), and it\u0027s mostly just surprising to me that thread local attribute proxying manages to find the real stdlib logger at the bottom of the pile anyway.\n\nWe don\u0027t need adapted adapters anymore.  And all the bits in this change that touch real code that matters fix that correctly by using `get_prefixed_logger` consistently which is a much better interface and I\u0027m happy to kill the old `PrefixedLoggerAdapter` non-sense.\n\nI think I\u0027d mostly be happy if sq in 934170: fix \u0027n sq? test ideas | https://review.opendev.org/c/openstack/swift/+/934170 - but I\u0027m not 100% about even *testing* the \"wrapped adapter\" pattern and I didn\u0027t do a complete audit for any more usage of `SwiftLogAdapter(adapted_swift_logger, {})` (where we name the server \"empty dict\")\n\nI\u0027d also be not THAT unhappy if someone else were to say this needs to land NOW as-is - these new/weird test \"bugs\" probably aren\u0027t even the worst stuff going on in parts of test_logs I didn\u0027t look at and they pass as written so by definition aren\u0027t ALL bad.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"329bcd35_ea5dea5c","updated":"2024-11-06 11:18:31.000000000","message":"Thanks Tim and Clay for spotting the test aberrations. Makes me even more glad that we\u0027re simplifying the class hierarchies.\n\nIMHO, in this patch:\n\n* we should fix the egregious places in tests where the SwiftLogAdapter is constructed with a dict instead of a server name\n\n* we might want to fix some of the tests where we\u0027re constructing a SwiftLogAdapter using a SwiftLogAdapter rather than a logging.Logger, since that is the primary use case. \n\n* Where we continue to construct SwiftLogAdapter using a SwiftLogAdapter maybe get the word \u0027stacked\u0027 into the test name so it\u0027s obvious that it is intended.\n\nTim\u0027s got me thinking about a copy/clone method again but I think that could be a follow-on patch.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"145708d2651ca0734c7e3bf7ce87350a657c427e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"f64cb58b_0c5f98ea","updated":"2024-11-08 04:35:46.000000000","message":"Two more nits, if you\u0027re going to respin it anyway.","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5db5c742_d22082fb","updated":"2024-11-13 12:47:40.000000000","message":"Some test cleanup needed, suggestions here https://review.opendev.org/c/openstack/swift/+/934964 (which also adds some more test coverage for SwiftLogAdapter)","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"303d906739b7e2d21df9768a56a16912b3c6f79d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"db9310fe_79539378","updated":"2024-11-14 11:21:48.000000000","message":"I like the cleanup in this patch, which leaves us with a simpler mix of LogAdapter classes (just one), a simpler interface for mutating a prefix and fewer places where that StatsdClient interface needs to be patched. Plus, we\u0027ve increased test coverage.","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"}],"doc/source/admin_guide.rst":[{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"34cfe9f459aa9a5538d7e69eb563ee86b4ac04aa","unresolved":true,"context_lines":[{"line_number":1085,"context_line":"    use a different log prefix with the same ``logging.Logger``.  Custom log"},{"line_number":1086,"context_line":"    handlers should therefore not modify any attributes of the"},{"line_number":1087,"context_line":"    ``SwiftLogAdapter`` instance other than those that will be copied if it is"},{"line_number":1088,"context_line":"    cloned."},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"A basic example that sets up a custom logger might look like the"},{"line_number":1091,"context_line":"following:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"ba78e23f_c98c8b07","line":1088,"updated":"2024-10-25 21:18:58.000000000","message":"should we still mention cloned instances here if not using the clone method?","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"    use a different log prefix with the same ``logging.Logger``.  Custom log"},{"line_number":1086,"context_line":"    handlers should therefore not modify any attributes of the"},{"line_number":1087,"context_line":"    ``SwiftLogAdapter`` instance other than those that will be copied if it is"},{"line_number":1088,"context_line":"    cloned."},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"A basic example that sets up a custom logger might look like the"},{"line_number":1091,"context_line":"following:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"06992265_03de73d7","line":1088,"in_reply_to":"1eb0c1d7_93590b51","updated":"2024-11-06 11:18:31.000000000","message":"Done","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e241617ea8ac994b5ee56f9c2a099d0ea44640d9","unresolved":true,"context_lines":[{"line_number":1085,"context_line":"    use a different log prefix with the same ``logging.Logger``.  Custom log"},{"line_number":1086,"context_line":"    handlers should therefore not modify any attributes of the"},{"line_number":1087,"context_line":"    ``SwiftLogAdapter`` instance other than those that will be copied if it is"},{"line_number":1088,"context_line":"    cloned."},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"A basic example that sets up a custom logger might look like the"},{"line_number":1091,"context_line":"following:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1eb0c1d7_93590b51","line":1088,"in_reply_to":"ba78e23f_c98c8b07","updated":"2024-10-28 09:46:22.000000000","message":"IMHO it\u0027s ok, we\u0027re using \u0027cloned\u0027 in a general way to describe making a copy of an instance.","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"}],"swift/cli/relinker.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfee5eb3b134b9b440b2dcce4f1a644b2562f12a","unresolved":true,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":1,"id":"2e75325c_f06e7d33","line":692,"updated":"2024-10-02 08:56:06.000000000","message":"I think we should assume that logger is already an instance of SwiftLogAdapter, so no need to wrap it again here. Certainly it is if constructed with getLogger at line 662, but I think it is generally assumed that loggers provide the statsd interface and therefore are SwiftLogAdapter instances.\n\nSame in auditor, recontructor, replicator.","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":1,"id":"a59051fc_98bdb135","line":692,"in_reply_to":"2e75325c_f06e7d33","updated":"2024-10-03 12:37:22.000000000","message":"Acknowledged","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":1,"id":"c29b67cd_69a5c4a4","line":692,"in_reply_to":"a59051fc_98bdb135","updated":"2024-10-03 17:51:38.000000000","message":"Is this necessary because line 662 might actually get a plain logging.Logger ?","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":1,"id":"b6d71855_a0e03fb7","line":692,"in_reply_to":"c29b67cd_69a5c4a4","updated":"2024-10-03 19:23:11.000000000","message":"Probably, here the logger is not SwiftLoggerAdapter but a RootLogger.\n\nResolved with Clay\u0027s comment.","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":659,"context_line":""},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"def parallel_process(do_cleanup, conf, logger\u003dNone, device_list\u003dNone):"},{"line_number":662,"context_line":"    logger \u003d logger or logging.getLogger()"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    # initialise recon dump for collection"},{"line_number":665,"context_line":"    # Lets start by always deleting last run\u0027s stats"}],"source_content_type":"text/x-python","patch_set":3,"id":"afd3f534_8a63ce87","line":662,"updated":"2024-10-03 17:51:38.000000000","message":"hmmm, this is unusual i.e. it\u0027s not ``utils.get_logger`` - probably beyond the scope of this patch","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":659,"context_line":""},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"def parallel_process(do_cleanup, conf, logger\u003dNone, device_list\u003dNone):"},{"line_number":662,"context_line":"    logger \u003d logger or logging.getLogger()"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    # initialise recon dump for collection"},{"line_number":665,"context_line":"    # Lets start by always deleting last run\u0027s stats"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6ec3c3_fd811d05","line":662,"in_reply_to":"afd3f534_8a63ce87","updated":"2024-10-03 19:23:11.000000000","message":"This is the same point @clay.gerrard@gmail.com bought up\nhttps://review.opendev.org/c/openstack/swift/+/915483/comment/b07f281a_b0754bf6/","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c143258150618eeb78a49662e3c9452d1368e8e","unresolved":true,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":3,"id":"952ef4c1_09dc6d4a","line":692,"updated":"2024-10-03 18:34:32.000000000","message":"at least *sometimes* the logger being passed in has to already be a SwiftLogAdapter yeah?  Maybe it just make sense to do this up at L662 and only if we\u0027re wrapping a stdlib getLogger?\n\nActually the CLI *always* passing in a logger instance; but sometimes it\u0027s from `get_logger` (i.e. already a SwiftLogAdapter) otherwise it\u0027s a stdlib Logger instance.\n\nI managed to functionally validate we *could* remove `logger\u003dNone` a make it a required arg as well as just creating a SwiftLogAdapter @ L811 but by the time I started adding a docstring to this function [1] and decided this diff looks better for this change:\n\n```\ndiff --git a/swift/cli/relinker.py b/swift/cli/relinker.py\nindex e0c104f0d..c35086335 100644\n--- a/swift/cli/relinker.py\n+++ b/swift/cli/relinker.py\n@@ -689,7 +689,10 @@ def parallel_process(do_cleanup, conf, logger\u003dNone, device_list\u003dNone):\n     for worker_devs in distribute_evenly(device_list, workers):\n         pid \u003d os.fork()\n         if pid \u003d\u003d 0:\n-            dev_logger \u003d SwiftLogAdapter(logger, {})\n+            if isinstance(logger, SwiftLogAdapter):\n+                dev_logger \u003d logger\n+            else:\n+                dev_logger \u003d SwiftLogAdapter(logger, {})\n             dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % (\n                 os.getpid(), \u0027,\u0027.join(worker_devs)))\n             os._exit(Relinker(\n```\n\nI think the fact that a SwiftLogAdapter *can* wrap a SwiftLogAdapter is sort of a mis-feature that we may not want to do on purpose if we can avoid it - so the isinstance check right before we call `set_prefix` seems ok.\n\n1. 931339: relinker: clean up log configuration | https://review.opendev.org/c/openstack/swift/+/931339","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":689,"context_line":"    for worker_devs in distribute_evenly(device_list, workers):"},{"line_number":690,"context_line":"        pid \u003d os.fork()"},{"line_number":691,"context_line":"        if pid \u003d\u003d 0:"},{"line_number":692,"context_line":"            dev_logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":693,"context_line":"            dev_logger.set_prefix(\u0027[pid\u003d%s, devs\u003d%s] \u0027 % ("},{"line_number":694,"context_line":"                os.getpid(), \u0027,\u0027.join(worker_devs)))"},{"line_number":695,"context_line":"            os._exit(Relinker("}],"source_content_type":"text/x-python","patch_set":3,"id":"f4c96b13_d5808030","line":692,"in_reply_to":"952ef4c1_09dc6d4a","updated":"2024-10-03 19:23:11.000000000","message":"Agree, if we could never have logger as None. Made some chnages.","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":806,"context_line":"        logger \u003d get_logger(conf)"},{"line_number":807,"context_line":"    else:"},{"line_number":808,"context_line":"        level \u003d \u0027DEBUG\u0027 if args.debug else \u0027INFO\u0027"},{"line_number":809,"context_line":"        conf \u003d {\u0027log_level\u0027: level}"},{"line_number":810,"context_line":"        if args.user:"},{"line_number":811,"context_line":"            # Drop privs before creating log file"},{"line_number":812,"context_line":"            drop_privileges(args.user)"}],"source_content_type":"text/x-python","patch_set":10,"id":"d81ef476_e47ce97a","line":809,"updated":"2024-10-24 10:57:30.000000000","message":"this looks like a drive-by attempt to clean up.\n\nLet\u0027s not get distracted, but FWIW I might have used a logging level as the canonical representation, and then used logging.getLevelName https://docs.python.org/3/library/logging.html#logging.getLevelName to get the string representation to use in the conf dict. That avoids the ``getattr`` at line 816 (which is fine in this case because it\u0027s very clear that level is either \u0027DEBUG\u0027 or \u0027INFO\u0027 , but in general I wince at the use of getattr with no exception handling).","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        logger \u003d get_logger(conf)"},{"line_number":807,"context_line":"    else:"},{"line_number":808,"context_line":"        level \u003d \u0027DEBUG\u0027 if args.debug else \u0027INFO\u0027"},{"line_number":809,"context_line":"        conf \u003d {\u0027log_level\u0027: level}"},{"line_number":810,"context_line":"        if args.user:"},{"line_number":811,"context_line":"            # Drop privs before creating log file"},{"line_number":812,"context_line":"            drop_privileges(args.user)"}],"source_content_type":"text/x-python","patch_set":10,"id":"77e9cfdf_71ce2df7","line":809,"in_reply_to":"d81ef476_e47ce97a","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":815,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":816,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":817,"context_line":"            filename\u003dargs.logfile)"},{"line_number":818,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), {})"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    conf.update({"},{"line_number":821,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ad590e81_5d7556f5","line":818,"range":{"start_line":818,"start_character":17,"end_line":818,"end_character":32},"updated":"2024-10-24 10:57:30.000000000","message":"``SwiftLogAdapter.__init__`` expects ``(logger, server, prefix\u003d\u0027\u0027)`` - never a dict! I\u0027d suggest ``server\u003drelinker`` - IDK if that is going to disturb any test assertions\n\nI wondered why not use the usual pattern of ``utils.get_logger``, but I guess here we\u0027re using a particular format so need to bypass some of what ``get_logger`` does.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":815,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":816,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":817,"context_line":"            filename\u003dargs.logfile)"},{"line_number":818,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), {})"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    conf.update({"},{"line_number":821,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"43403066_9c489e11","line":818,"range":{"start_line":818,"start_character":17,"end_line":818,"end_character":32},"in_reply_to":"ad590e81_5d7556f5","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"34cfe9f459aa9a5538d7e69eb563ee86b4ac04aa","unresolved":true,"context_lines":[{"line_number":815,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":816,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":817,"context_line":"            filename\u003dargs.logfile)"},{"line_number":818,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), server\u003d\u0027relinker\u0027)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    conf.update({"},{"line_number":821,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"47eeb361_37c1d841","line":818,"updated":"2024-10-25 21:18:58.000000000","message":"is the \u0027server\u0027 change necessary?","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e241617ea8ac994b5ee56f9c2a099d0ea44640d9","unresolved":true,"context_lines":[{"line_number":815,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":816,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":817,"context_line":"            filename\u003dargs.logfile)"},{"line_number":818,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), server\u003d\u0027relinker\u0027)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    conf.update({"},{"line_number":821,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7546353a_1d00ed62","line":818,"in_reply_to":"47eeb361_37c1d841","updated":"2024-10-28 09:46:22.000000000","message":"The significant change here is that before we\u0027d pass astdlib Logger to the relinker in the ``else`` clause whereas above we were getting a SwiftLogadapter in the ``if`` clause (line 806)\n\nNow we\u0027re also getting a SwiftLogAdapter here, and we can choose a name for it or it will default to \u0027swift\u0027.","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":false,"context_lines":[{"line_number":815,"context_line":"            format\u003d\u0027%(message)s\u0027,"},{"line_number":816,"context_line":"            level\u003dgetattr(logging, level),"},{"line_number":817,"context_line":"            filename\u003dargs.logfile)"},{"line_number":818,"context_line":"        logger \u003d SwiftLogAdapter(logging.getLogger(), server\u003d\u0027relinker\u0027)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    conf.update({"},{"line_number":821,"context_line":"        \u0027swift_dir\u0027: args.swift_dir or conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"adf46491_d80611e7","line":818,"in_reply_to":"7546353a_1d00ed62","updated":"2024-11-06 11:18:31.000000000","message":"Done","commit_id":"eb39ebd2a6b5fedb11fdbe6f39823ed972707d18"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9bf59170455a5961165b53d4fef70c10a134df73","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"},{"line_number":94,"context_line":"    SwiftLogFormatter,"},{"line_number":95,"context_line":"    SwiftLogAdapter,"},{"line_number":96,"context_line":"    LoggerFileObject,"},{"line_number":97,"context_line":"    PipeMutex,"},{"line_number":98,"context_line":"    NoopMutex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"c5ce904b_66bf3f60","line":95,"updated":"2024-10-03 22:27:31.000000000","message":"OK, the old names are gone -- odds are no one was really using them anyway, right?\n\nMy question, then, is whether this _new name_ should be exposed in `swift.common.utils` at all, or just `swift.common.utils.logs`","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4bc4c5e0c254b492bb1a81b58ad056c9bb1d189d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"},{"line_number":94,"context_line":"    SwiftLogFormatter,"},{"line_number":95,"context_line":"    SwiftLogAdapter,"},{"line_number":96,"context_line":"    LoggerFileObject,"},{"line_number":97,"context_line":"    PipeMutex,"},{"line_number":98,"context_line":"    NoopMutex,"}],"source_content_type":"text/x-python","patch_set":4,"id":"32d2941e_30a1610e","line":95,"in_reply_to":"c5ce904b_66bf3f60","updated":"2024-10-07 14:20:26.000000000","message":"Clay:  If we really cared about minimizing the non-interface names we pull from utils.logs into utils we could have paid that test churn when we broke out utils.logs; but maybe it\u0027s convenient to winnow down the list NOW since we\u0027ve essentially already bought into the idea that logs.LogAdapter was an internal-only name and since we have to touch any code that was referring to it in tests anyway we might as well do the rename to the most-correct-fully-qualified-name and drop the alias.\n\nI agree.","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"},{"line_number":94,"context_line":"    SwiftLogFormatter,"},{"line_number":95,"context_line":"    SwiftLogAdapter,"},{"line_number":96,"context_line":"    LoggerFileObject,"},{"line_number":97,"context_line":"    PipeMutex,"},{"line_number":98,"context_line":"    NoopMutex,"}],"source_content_type":"text/x-python","patch_set":6,"id":"e7413506_76d320e4","line":95,"updated":"2024-10-08 18:10:43.000000000","message":"I don\u0027t think we need to expose new log primative names in common.utils","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    NullLogger,"},{"line_number":93,"context_line":"    capture_stdio,"},{"line_number":94,"context_line":"    SwiftLogFormatter,"},{"line_number":95,"context_line":"    SwiftLogAdapter,"},{"line_number":96,"context_line":"    LoggerFileObject,"},{"line_number":97,"context_line":"    PipeMutex,"},{"line_number":98,"context_line":"    NoopMutex,"}],"source_content_type":"text/x-python","patch_set":6,"id":"2b0d7981_6d289cdc","line":95,"in_reply_to":"e7413506_76d320e4","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":88,"context_line":"    SysLogHandler,  # t.u.helpers.setup_servers monkey patch is sketch"},{"line_number":89,"context_line":"    logging_monkey_patch,"},{"line_number":90,"context_line":"    get_logger,"},{"line_number":91,"context_line":"    get_prefixed_logger,"},{"line_number":92,"context_line":"    LogLevelFilter,"},{"line_number":93,"context_line":"    NullLogger,"},{"line_number":94,"context_line":"    capture_stdio,"}],"source_content_type":"text/x-python","patch_set":10,"id":"b023e658_a87956b3","line":91,"updated":"2024-10-24 10:57:30.000000000","message":"ok. IIUC the plan is for the next patchset to move get_logger and get_prefixed_logger into this module so this import will go away.\n\nI think I prefer keeping the two functions together in the same module rather than adding ``get_prefixed_logger`` in this module now and moving ``get_logger`` to join it later","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    SysLogHandler,  # t.u.helpers.setup_servers monkey patch is sketch"},{"line_number":89,"context_line":"    logging_monkey_patch,"},{"line_number":90,"context_line":"    get_logger,"},{"line_number":91,"context_line":"    get_prefixed_logger,"},{"line_number":92,"context_line":"    LogLevelFilter,"},{"line_number":93,"context_line":"    NullLogger,"},{"line_number":94,"context_line":"    capture_stdio,"}],"source_content_type":"text/x-python","patch_set":10,"id":"8fa5e955_82d46396","line":91,"in_reply_to":"b023e658_a87956b3","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"}],"swift/common/utils/logs.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c8bc87bd474765ec26e9a79a4bd4f5ce5d4a64b4","unresolved":true,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @thread_locals.setter"},{"line_number":596,"context_line":"    def thread_locals(self, thread_locals):"},{"line_number":597,"context_line":"        self.logger.thread_locals \u003d thread_locals"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def exception(self, msg, *a, **kw):"},{"line_number":600,"context_line":"        # We up-call to exception() where stdlib uses error() so we can get"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c15982a_bddc185a","side":"PARENT","line":597,"updated":"2024-10-02 03:43:33.000000000","message":"Interesting... so we used to go ahead and track `thread_locals`... but this doesn\u0027t inherit from our `LogAdapter` so nothing in _this_ class directly _uses_ it -- I think it\u0027s just added for the sake of API compatibility!? 🤮","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @thread_locals.setter"},{"line_number":596,"context_line":"    def thread_locals(self, thread_locals):"},{"line_number":597,"context_line":"        self.logger.thread_locals \u003d thread_locals"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def exception(self, msg, *a, **kw):"},{"line_number":600,"context_line":"        # We up-call to exception() where stdlib uses error() so we can get"}],"source_content_type":"text/x-python","patch_set":1,"id":"04ba96bf_5022e26e","side":"PARENT","line":597,"in_reply_to":"0c15982a_bddc185a","updated":"2024-10-03 12:37:22.000000000","message":"Done","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c8bc87bd474765ec26e9a79a4bd4f5ce5d4a64b4","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"88fed0ad_5d0f2d6c","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"updated":"2024-10-02 03:43:33.000000000","message":"If we default it to `\u0027\u0027` we ought to be able to skip a bunch of `if self.prefix is not None:` checks...","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"49aea680ddfbc28e77e76e9dbbcb08aeb2743dac","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a2870f4_7af94a57","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"012ddb0d_54116c58","updated":"2024-10-03 22:47:17.000000000","message":"Done","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d72a3d06_d5773d29","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"037754f9_12a78b5f","updated":"2024-10-03 19:23:11.000000000","message":"If I set self.prefix \u003d \u0027\u0027, and remove if self.prefix is not None:\nHundreds of tests fail with\nFile \"/vagrant/swift/swift/common/utils/logs.py\", line 331, in process\n    msg \u003d self.prefix + msg\nTypeError: can only concatenate str (not \"ACL\") to str\n\nThe failing statement being \u0027AssertionError: 500 !\u003d 403 : In tearDown it seems the test (accidently?) broke ACL access for test:other to /bucket\u0027\n\nmsg \u003d self.prefix + str(msg) works in py3 but not py2.\n\n\n\nIf I set self.prefix \u003d \u0027\u0027, and remove if self.prefix is not None: \nmsg \u003d self.prefix + str(msg)\n\nthen 25 py2 tests fail saying \n\u003e       msg \u003d self.prefix + str(msg)\nE       UnicodeEncodeError: \u0027ascii\u0027 codec can\u0027t encode character u\u0027\\xe8\u0027 in position 110: ordinal not in range(128)\n\nAlso,\n\u003e msg \u003d self.prefix + msg\nTypeError: cannot concatenate \u0027str\u0027 and \u0027ACL\u0027 objects\n\n\nSo we can do a if py3 then msg \u003d str(msg) and if py2, \n\u003e       msg \u003d str(self.prefix) + str(msg)\nE       UnicodeEncodeError: \u0027ascii\u0027 codec can\u0027t encode character u\u0027\\xe8\u0027 in position 110: ordinal not in range(128)","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc45dbb4a19f910340ba78e6d6c4eacb6b847753","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"efcef24a_c003d59c","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"3a2870f4_7af94a57","updated":"2024-10-04 09:42:46.000000000","message":"OK, so there\u0027s places where the the logger is passed types other than a str e.g. [1]. The stdlib logger is happy to accept that, but our adapter barfs because you can\u0027t do ``\u003cstr\u003e + \u003cother-type\u003e``.\n\nBut you can do ``\u0027%s%s\u0027 % (\u003cstr\u003e, \u003cother-type\u003e) and we should in order to be defensive...see [2].\n\nThe old PrefixLogAdapter was already vulnerable to this - its just luck that we never call a PrefixLogAdapter with a non-str. But now that all SwiftLogAdapter\u0027s have the prefix function we exposed the bug.\n\nWe could also clean up the places where pass non-str to the logger [3]\n\n[1] https://github.com/openstack/swift/blob/2deab27dadb2f765a9abac43d5ecc6ad1851c6de/swift/common/middleware/s3api/controllers/bucket.py#L386-L385\n\n[2]https://review.opendev.org/c/openstack/swift/+/931374\n\n[3] https://review.opendev.org/c/openstack/swift/+/931375","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d40937df_7ccebc56","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"88fed0ad_5d0f2d6c","updated":"2024-10-03 12:37:22.000000000","message":"It gives out py2 errors because we cannot concatenate str and bytes. We can add if py2 elif py3 but that would increase the number of line changes and complexity.","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"037754f9_12a78b5f","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"d40937df_7ccebc56","updated":"2024-10-03 17:51:38.000000000","message":"That\u0027s odd because the unit test just calls ``set_prefix(\u0027blah\u0027)``","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9bf59170455a5961165b53d4fef70c10a134df73","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"012ddb0d_54116c58","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"d72a3d06_d5773d29","updated":"2024-10-03 22:27:31.000000000","message":"_Fascinating!_ Makes me worry a little that the prefixed-log has some nasty corner cases lurking. This seems no worse than where we were, though.","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4bc4c5e0c254b492bb1a81b58ad056c9bb1d189d","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d None"},{"line_number":258,"context_line":"        self.server \u003d server"},{"line_number":259,"context_line":"        self.warn \u003d self.warning"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"305b6f50_b397fec2","line":257,"range":{"start_line":257,"start_character":22,"end_line":257,"end_character":26},"in_reply_to":"efcef24a_c003d59c","updated":"2024-10-07 14:20:26.000000000","message":"Done","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":574,"context_line":"        return self.logger.update_stats(*a, **kw)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def increment(self, *a, **kw):"},{"line_number":577,"context_line":"        return self.logger.increment(*a, **kw)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def decrement(self, *a, **kw):"},{"line_number":580,"context_line":"        return self.logger.decrement(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d4e227ef_23f7bfea","side":"PARENT","line":577,"updated":"2024-10-08 18:10:43.000000000","message":"it seems like currently a PrefixLoggerAdapter should be expected to have statsd_client methods.\n\nSince the auditor watcher plugin system supports out-of-tree code we should try to make sure the `logger` instance it\u0027s getting can still call statsd methods.","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        return self.logger.update_stats(*a, **kw)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def increment(self, *a, **kw):"},{"line_number":577,"context_line":"        return self.logger.increment(*a, **kw)"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def decrement(self, *a, **kw):"},{"line_number":580,"context_line":"        return self.logger.decrement(*a, **kw)"}],"source_content_type":"text/x-python","patch_set":6,"id":"454367f7_3fe71f70","side":"PARENT","line":577,"in_reply_to":"d4e227ef_23f7bfea","updated":"2024-10-22 13:28:01.000000000","message":"checked\nlogger instance can still call statsd methods","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    @property"},{"line_number":592,"context_line":"    def thread_locals(self):"},{"line_number":593,"context_line":"        return self.logger.thread_locals"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @thread_locals.setter"},{"line_number":596,"context_line":"    def thread_locals(self, thread_locals):"}],"source_content_type":"text/x-python","patch_set":6,"id":"70f3f59f_0e9020c9","side":"PARENT","line":593,"updated":"2024-10-08 18:10:43.000000000","message":"interesting; so the thread_locals property only exists on an instance of utils.LogAdapter/logs.SwiftLogAdapter - so this class seemingly only ever intended to wrap an adapted logger and not a real logger instance.","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"ff8d902cb225a263ab8f03ed4ec6407519614240","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    @property"},{"line_number":592,"context_line":"    def thread_locals(self):"},{"line_number":593,"context_line":"        return self.logger.thread_locals"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    @thread_locals.setter"},{"line_number":596,"context_line":"    def thread_locals(self, thread_locals):"}],"source_content_type":"text/x-python","patch_set":6,"id":"94570797_92a8f8f6","side":"PARENT","line":593,"in_reply_to":"70f3f59f_0e9020c9","updated":"2024-10-14 13:33:44.000000000","message":"Done","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"47a051b0471acec5ccc9b1108466a8cfc9897e64","unresolved":true,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    _cls_thread_local \u003d threading.local()"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d \u0027\u0027"},{"line_number":258,"context_line":"        self.server \u003d server"}],"source_content_type":"text/x-python","patch_set":8,"id":"85a0a436_cb2ae3bb","line":255,"updated":"2024-10-15 10:55:19.000000000","message":"I think it would be reasonable to have prefix be an optional arg to the constructor. See https://review.opendev.org/c/openstack/swift/+/932356","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    _cls_thread_local \u003d threading.local()"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def __init__(self, logger, server):"},{"line_number":256,"context_line":"        logging.LoggerAdapter.__init__(self, logger, {})"},{"line_number":257,"context_line":"        self.prefix \u003d \u0027\u0027"},{"line_number":258,"context_line":"        self.server \u003d server"}],"source_content_type":"text/x-python","patch_set":8,"id":"d66e122d_73cc3476","line":255,"in_reply_to":"85a0a436_cb2ae3bb","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":323,"context_line":"        return self.logger.getEffectiveLevel()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def set_prefix(self, prefix):"},{"line_number":326,"context_line":"        self.prefix \u003d \u0027\u0027 if prefix is None else prefix"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def process(self, msg, kwargs):"},{"line_number":329,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"41e41d7b_90390569","line":326,"updated":"2024-10-16 18:04:35.000000000","message":"since we\u0027re destroying the PrefixedLogAdapter we don\u0027t actually *have* to carry this interface forward!\n\nWe can get-rid of `set_prefix` as a concept and replace it with a different pattern:\n\n    - my_logger \u003d PrefixedLogAdapter(logger)\n    - my_logger.set_prefix(\u0027foo\u0027)\n    + my_logger \u003d magic_func(logger, prefix\u003d\u0027foo\u0027)","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":323,"context_line":"        return self.logger.getEffectiveLevel()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def set_prefix(self, prefix):"},{"line_number":326,"context_line":"        self.prefix \u003d \u0027\u0027 if prefix is None else prefix"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def process(self, msg, kwargs):"},{"line_number":329,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1cf4e82c_44bda7b9","line":326,"updated":"2024-10-16 18:04:35.000000000","message":"since we\u0027re getting rid of the PrefixLogAdapter object don\u0027t HAVE to carry this interface forward.  Instead of supporting mutation we could require that you create a clone with a new prefix:\n\n    my_logger \u003d get_clone_with_prefix(logger, prefix\u003d...)","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        return self.logger.getEffectiveLevel()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def set_prefix(self, prefix):"},{"line_number":326,"context_line":"        self.prefix \u003d \u0027\u0027 if prefix is None else prefix"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def process(self, msg, kwargs):"},{"line_number":329,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"f6b1a103_e13bf9a1","line":326,"in_reply_to":"1cf4e82c_44bda7b9","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        return self.logger.getEffectiveLevel()"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def set_prefix(self, prefix):"},{"line_number":326,"context_line":"        self.prefix \u003d \u0027\u0027 if prefix is None else prefix"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def process(self, msg, kwargs):"},{"line_number":329,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"390893e6_1316e4d0","line":326,"in_reply_to":"41e41d7b_90390569","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    A Logger like object which performs some reformatting on calls to"},{"line_number":249,"context_line":"    :meth:`exception`.  Can be used to store a threadlocal transaction id and"},{"line_number":250,"context_line":"    client ip."},{"line_number":251,"context_line":"    \"\"\""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    _cls_thread_local \u003d threading.local()"}],"source_content_type":"text/x-python","patch_set":10,"id":"fd28e63c_be97cb0f","line":250,"updated":"2024-10-24 10:57:30.000000000","message":"We need to update this docstring. I suggest\n\n```\nA LogAdapter that modifies the adapted ``Logger`` instance in the following ways:\n\n  * Performs some reformatting on calls to\n    :meth:`exception`.\n  * Provides threadlocal txn_id and\n    client_ip attributes.\n  * Adds the txn_id, client_ip and server attributes to the \u0027extras\u0027 dict when a message is processed.\n  * Adds the given prefix to the start of each log message.\n  * Provides a notice method for logging at NOTICE level.\n```\n\nnote: we could also document that this class provides the statsd client interface, but given that the next patchset is going to remove that I\u0027m not inclined to write that doctsring! 😊","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    A Logger like object which performs some reformatting on calls to"},{"line_number":249,"context_line":"    :meth:`exception`.  Can be used to store a threadlocal transaction id and"},{"line_number":250,"context_line":"    client ip."},{"line_number":251,"context_line":"    \"\"\""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    _cls_thread_local \u003d threading.local()"}],"source_content_type":"text/x-python","patch_set":10,"id":"deeee584_423749ee","line":250,"in_reply_to":"fd28e63c_be97cb0f","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"c735fb858d1872929c7892014e5fa5c93738b697","unresolved":false,"context_lines":[{"line_number":708,"context_line":"    return adapted_logger"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"def get_prefixed_logger(logger, prefix):"},{"line_number":712,"context_line":"    new_logger \u003d SwiftLogAdapter(logger.logger, logger.server, prefix\u003dprefix)"},{"line_number":713,"context_line":"    return new_logger"},{"line_number":714,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"c20a56ac_781983c0","line":711,"range":{"start_line":711,"start_character":4,"end_line":711,"end_character":23},"updated":"2024-10-22 14:40:09.000000000","message":"It would be a good idea to move this to utils in the next patch (facade) when we also move the get_logger function","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":708,"context_line":"    return adapted_logger"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"def get_prefixed_logger(logger, prefix):"},{"line_number":712,"context_line":"    new_logger \u003d SwiftLogAdapter(logger.logger, logger.server, prefix\u003dprefix)"},{"line_number":713,"context_line":"    return new_logger"},{"line_number":714,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"6ab1ab57_dddf7693","line":711,"range":{"start_line":711,"start_character":24,"end_line":711,"end_character":30},"updated":"2024-10-24 10:57:30.000000000","message":"nit: I think I might prefer to name this arg ``adapted_logger`` or ``swift_logger`` to give a hint that we\u0027re expecting a SwiftLogAdapter -  because that is what MUST be passed.\n\nI guess I would just like to get away from ``logger.logger`` everywhere that we\u0027re referring to ``SwiftLogAdapter`` has a ``logging.Logger`` and this would be one small step.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":708,"context_line":"    return adapted_logger"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"def get_prefixed_logger(logger, prefix):"},{"line_number":712,"context_line":"    new_logger \u003d SwiftLogAdapter(logger.logger, logger.server, prefix\u003dprefix)"},{"line_number":713,"context_line":"    return new_logger"},{"line_number":714,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3af684c7_c439b63d","line":711,"range":{"start_line":711,"start_character":24,"end_line":711,"end_character":30},"in_reply_to":"6ab1ab57_dddf7693","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":false,"context_lines":[{"line_number":708,"context_line":"    return adapted_logger"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"def get_prefixed_logger(logger, prefix):"},{"line_number":712,"context_line":"    new_logger \u003d SwiftLogAdapter(logger.logger, logger.server, prefix\u003dprefix)"},{"line_number":713,"context_line":"    return new_logger"},{"line_number":714,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"2e67dd2a_a37f3f0e","line":711,"range":{"start_line":711,"start_character":4,"end_line":711,"end_character":23},"in_reply_to":"c20a56ac_781983c0","updated":"2024-10-24 10:57:30.000000000","message":"Definitely, this will need to move because it will also grow some statsd specific code. But I quite like that this function lives adjacent to get_logger and the two move together in the next patchset.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a62e5efa6ba33e5c8876e76c86a27f4721c6c39b","unresolved":true,"context_lines":[{"line_number":255,"context_line":"  * Adds the txn_id, client_ip and server attributes to the"},{"line_number":256,"context_line":"    \u0027extras\u0027 dict when a message is processed."},{"line_number":257,"context_line":"  * Adds the given prefix to the start of each log message."},{"line_number":258,"context_line":"  * Provides a notice method for logging at NOTICE level."},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    _cls_thread_local \u003d threading.local()"}],"source_content_type":"text/x-python","patch_set":12,"id":"55c8888c_a10ff050","line":258,"updated":"2024-10-25 11:33:20.000000000","message":"nit: I\u0027m surprised that pep8 doesn\u0027t complain about these lines not being indented to match the ``\"\"\"``\n\nIt will look odd when rendered by sphinx for docs....except we haven\u0027t yet added the new logs module to the source docs !\n\nSee https://review.opendev.org/c/openstack/swift/+/933411 (where I also fixed this bullet list)","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"2822f9b32077fc5dd14d450c4e1e2719140e5594","unresolved":false,"context_lines":[{"line_number":255,"context_line":"  * Adds the txn_id, client_ip and server attributes to the"},{"line_number":256,"context_line":"    \u0027extras\u0027 dict when a message is processed."},{"line_number":257,"context_line":"  * Adds the given prefix to the start of each log message."},{"line_number":258,"context_line":"  * Provides a notice method for logging at NOTICE level."},{"line_number":259,"context_line":"    \"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    _cls_thread_local \u003d threading.local()"}],"source_content_type":"text/x-python","patch_set":12,"id":"7b2f2f4d_a36ec878","line":258,"in_reply_to":"55c8888c_a10ff050","updated":"2024-10-25 13:26:13.000000000","message":"Acknowledged","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a62e5efa6ba33e5c8876e76c86a27f4721c6c39b","unresolved":true,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":720,"context_line":"    new_logger \u003d SwiftLogAdapter(swift_logger.logger,"},{"line_number":721,"context_line":"                                 swift_logger.server, prefix\u003dprefix)"},{"line_number":722,"context_line":"    return new_logger"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"6fe189d8_53230488","line":721,"updated":"2024-10-25 11:33:20.000000000","message":"nit: style: some people would say that args should either all fit on one line or be on individual lines, but not a mix. I, for one, am not that disciplined, but in this case the args would fit on one line and that would probably be more in keeping with existing style:\n\n```\n    new_logger \u003d SwiftLogAdapter(\n        swift_logger.logger, swift_logger.server, prefix\u003dprefix)\n\n```","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"2822f9b32077fc5dd14d450c4e1e2719140e5594","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":720,"context_line":"    new_logger \u003d SwiftLogAdapter(swift_logger.logger,"},{"line_number":721,"context_line":"                                 swift_logger.server, prefix\u003dprefix)"},{"line_number":722,"context_line":"    return new_logger"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"be1d83aa_401350f1","line":721,"in_reply_to":"6fe189d8_53230488","updated":"2024-10-25 13:26:13.000000000","message":"Acknowledged","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"efee49c0_4d526840","line":719,"updated":"2024-11-05 18:34:53.000000000","message":"ok and since the statds client is hanging off of swift_logger.logger that attribute is available to the SwiftLogAdapter\u0027s statds delegate methods.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"f8e5104e_e4b0eb77","line":719,"in_reply_to":"efee49c0_4d526840","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57eff4c67738ea98538f330a81511d0899a02cff","unresolved":true,"context_lines":[{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"class NullLogger(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"d939daff_bb9a643a","line":720,"updated":"2024-11-05 19:58:13.000000000","message":"Are we trying to have this return a duplicate of `swift_logger` except for a changed prefix, or a new `SwiftLogAdapter` that *only* copies these two attrs (`logger`, `server`)? That is, if we later identify some other piece of state that `SwiftLogAdapter` ought to track (and probably accept as an arg/kwarg), do we think we\u0027d probably need to update this function, too?\n\nIf so, I wonder if we might want to move the knowledge of what state is important to copy back into `SwiftLogAdapter`, and have this method become something like\n```\ncopied_logger \u003d swift_logger.copy()\ncopied_logger.prefix \u003d prefix\nreturn copied_logger\n```","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e8140b6e6236892242d5f5ff83277f6e99c7059e","unresolved":false,"context_lines":[{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"class NullLogger(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ea5db96f_88bfe61a","line":720,"in_reply_to":"8b6c3114_6b11e290","updated":"2024-11-08 15:00:24.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":717,"context_line":"def get_prefixed_logger(swift_logger, prefix):"},{"line_number":718,"context_line":"    new_logger \u003d SwiftLogAdapter("},{"line_number":719,"context_line":"        swift_logger.logger, swift_logger.server, prefix\u003dprefix)"},{"line_number":720,"context_line":"    return new_logger"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"class NullLogger(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"8b6c3114_6b11e290","line":720,"in_reply_to":"d939daff_bb9a643a","updated":"2024-11-06 11:18:31.000000000","message":"There was a version where I proposed a clone() method. It started to feel unnecessary when this is the only place IIRC we\u0027d call it. I do however still quite like having SwiftLogAdapter know what needs to be cloned. \n\nWhat I\u0027d dislike is:\n\n```\ndef clone(prefix\u003d\u0027new-prefix\u0027)\n```\n\nwhich Tim is NOT proposing - I\u0027m just saying in case we slip that way.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"}],"swift/obj/auditor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    Simple and gets the job done. Note that we aren\u0027t doing anything"},{"line_number":489,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":490,"context_line":"    in the plugins."},{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a7b629d_2ca6b83b","line":490,"updated":"2024-10-03 17:51:38.000000000","message":"It would be a bonus to add params to the docstring so that we can be specific about the logger\n\ni.e. including\n\n```\n:param logger: an instance of ``SwiftLogAdapter``.\n```","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    Simple and gets the job done. Note that we aren\u0027t doing anything"},{"line_number":489,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":490,"context_line":"    in the plugins."},{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"}],"source_content_type":"text/x-python","patch_set":3,"id":"525b25d6_626a7290","line":490,"in_reply_to":"7a7b629d_2ca6b83b","updated":"2024-10-03 19:23:11.000000000","message":"Acknowledged","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9bf59170455a5961165b53d4fef70c10a134df73","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ad752fa9_b9dc1fed","line":500,"updated":"2024-10-03 22:27:31.000000000","message":"So this now overwrites whatever prefix was previously there, rather than adding to it... and that\u0027s the overall `AuditorWorker`\u0027s logger...\n\nHave we tried running an auditor with a watcher? I\u0027m pretty sure this is going to impact **all** audit logging, and if there\u0027s more than one watcher, only the last one gets its prefix right.","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc45dbb4a19f910340ba78e6d6c4eacb6b847753","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf6255bb_9ffdb95d","line":500,"in_reply_to":"8860101a_1027855b","updated":"2024-10-04 09:42:46.000000000","message":"Good spot @Tim. We had convinced ourselves that the prefix was only set when a new process was spawned. 😞\n\nWe could do something like \n\n```\nself.logger \u003d SwiftLogAdapter(logger)\n```\n\nbut we\u0027d need to have the SwiftLogAdapter cope with finding a statsd_client from nested loggers, which I think is do-able but breaks our clean separation from the scope of the following facade-related patch.","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"49aea680ddfbc28e77e76e9dbbcb08aeb2743dac","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":4,"id":"8860101a_1027855b","line":500,"in_reply_to":"ad752fa9_b9dc1fed","updated":"2024-10-03 22:47:17.000000000","message":"Something like def test_builtin_watchers(self) in obj/test_auditor.py?","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4bc4c5e0c254b492bb1a81b58ad056c9bb1d189d","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":4,"id":"99dd6861_94753089","line":500,"in_reply_to":"bf6255bb_9ffdb95d","updated":"2024-10-07 14:20:26.000000000","message":"We can have this in a following patch if we find a good fix!","commit_id":"ee6f1d15d08ff1e12e7a86ef2eebc76b9481aa69"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bb223b07cb14c6bc8e23128837e705a12ac189a1","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa23ad90_21e98465","line":500,"updated":"2024-10-07 14:31:17.000000000","message":"this needs a wrapper before we mutate the auditors logger.","commit_id":"efa13a89207a094f4dd6d3ba4dea7acababadfea"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9f649bbad26133c22d764df65f8420e36e3119b4","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":5,"id":"35b8c955_046a5ed7","line":500,"in_reply_to":"0a1b9fef_84ee9567","updated":"2024-10-08 08:38:03.000000000","message":"To clarify, I agree that his needs to be fixed before this patch merges. I hadn\u0027t intended to suggest otherwise, I suspect we may need to recombine this patch with at least some aspects of the following facade-like patch(s)","commit_id":"efa13a89207a094f4dd6d3ba4dea7acababadfea"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0184677abe9dfeb10ea5e70fe150ba9b39444516","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":5,"id":"0a1b9fef_84ee9567","line":500,"in_reply_to":"425a9227_57fb507c","updated":"2024-10-07 23:09:55.000000000","message":"Discussed on call. Adding wrapper.","commit_id":"efa13a89207a094f4dd6d3ba4dea7acababadfea"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"330a56ce1920aaf61ab9fc2f397d997f1ab879a3","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        try:"},{"line_number":503,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":5,"id":"425a9227_57fb507c","line":500,"in_reply_to":"fa23ad90_21e98465","updated":"2024-10-07 14:47:10.000000000","message":"https://review.opendev.org/c/openstack/swift/+/931060/comment/ad752fa9_b9dc1fed/\n@alistairncoles@gmail.com thinks it might be out of scope for this and next patch.","commit_id":"efa13a89207a094f4dd6d3ba4dea7acababadfea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":497,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":498,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":501,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"877da985_accf6109","line":500,"updated":"2024-10-08 18:10:43.000000000","message":"I added a call here to `self.logger.increment()`\n\n```\ndiff --git a/swift/obj/auditor.py b/swift/obj/auditor.py\nindex 29a2dfde7..18d15f9da 100644\n--- a/swift/obj/auditor.py\n+++ b/swift/obj/auditor.py\n@@ -499,6 +499,7 @@ class WatcherWrapper(object):\n         self.watcher_in_error \u003d False\n         self.logger \u003d SwiftLogAdapter(logger, {})\n         self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)\n+        self.logger.increment(\u0027test\u0027)\n \n         try:\n             self.watcher \u003d watcher_class(conf, self.logger)\n```\n\nI added a watcher to my object-server auditor config:\n\n```\nvagrant@saio:~$ grep object-auditor -A 1 /etc/swift/object-server/replication-daemons.conf-template \n[object-auditor]\nwatchers \u003d swift#dark_data\n```\n\nwhen I run my auditor I get a traceback like:\n\n```\nobject-auditor-6030: ERROR: Unable to run auditing: \u0027SwiftLogAdapter\u0027 object has no attribute \u0027statsd_client\u0027: \nTraceback (most recent call last):\n  File \"/vagrant/swift/swift/obj/auditor.py\", line 379, in fork_child\n    self.run_audit(**kwargs)\n  File \"/vagrant/swift/swift/obj/auditor.py\", line 359, in run_audit\n    worker \u003d AuditorWorker(self.conf, self.logger, self.rcache,\n  File \"/vagrant/swift/swift/obj/auditor.py\", line 106, in __init__\n    self.watchers \u003d [\n  File \"/vagrant/swift/swift/obj/auditor.py\", line 107, in \u003clistcomp\u003e\n    WatcherWrapper(wdef[\u0027klass\u0027], name, wdef[\u0027conf\u0027], logger)\n  File \"/vagrant/swift/swift/obj/auditor.py\", line 502, in __init__\n    self.logger.increment(\u0027test\u0027)\n  File \"/vagrant/swift/swift/common/utils/logs.py\", line 422, in wrapped\n    if getattr(self.logger, \u0027statsd_client\u0027):\nAttributeError: \u0027SwiftLogAdapter\u0027 object has no attribute \u0027statsd_client\u0027\n```","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"ff8d902cb225a263ab8f03ed4ec6407519614240","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":498,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d SwiftLogAdapter(logger, {})"},{"line_number":501,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3d6ebe9d_4d92ff0e","line":500,"in_reply_to":"877da985_accf6109","updated":"2024-10-14 13:33:44.000000000","message":"Done","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8d8c2d3e81ec63e4f67c5a327f6aaaab18c468c8","unresolved":true,"context_lines":[{"line_number":497,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":498,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d SwiftLogAdapter(logger.logger, {})"},{"line_number":501,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3ea256bb_b055f1b4","line":500,"updated":"2024-10-14 18:06:35.000000000","message":"I don\u0027t think this is sufficient because of the custom log handler nonsense in get_logger 😞 We may need to pass any new adapted logger to any custom log handlers that *may* exist out there in the wild.\n\nI started work on a test and a fix but ran out of time and ideas for today\nhttps://review.opendev.org/c/openstack/swift/+/932356\n\nBTW FYI here is the patch that added custom log handers (with zero test coverage!) https://review.opendev.org/c/openstack/swift/+/14111","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"47a051b0471acec5ccc9b1108466a8cfc9897e64","unresolved":true,"context_lines":[{"line_number":497,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":498,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d SwiftLogAdapter(logger.logger, {})"},{"line_number":501,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bbdd989c_7a173267","line":500,"in_reply_to":"3ea256bb_b055f1b4","updated":"2024-10-15 10:55:19.000000000","message":"I\u0027ve talked myself down from most of my concern about custom log handlers. IMHO it would be unwise for a custom log handler to be modifying the SwiftLogAdapter in ways that wouldn\u0027t be replicated on a cloned copy. The suggestion of the naming (and the one example third party plugin) is to add handlers to the core logging.Logger object.\n\nThat said, I think it would be better to use a clone() method rather than calling the constructor and relying on devs to init the new SwiftLogAdapter with the attributes of the old. See https://review.opendev.org/c/openstack/swift/+/932356\n\nThis patchset illustrates why: \n```\nSwiftLogAdapter(logger.logger, {})\n```\nis wrong. The second arg should be a string server name.","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":498,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d SwiftLogAdapter(logger.logger, {})"},{"line_number":501,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3c6cdba2_b1f014a5","line":500,"in_reply_to":"bbdd989c_7a173267","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"8bd333ba690887cda6da623c35356e75d82030be"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":496,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger.clone()"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b5f1792f_09e8e7a8","line":499,"updated":"2024-10-16 18:04:35.000000000","message":"self.logger \u003d magic_function(magic_function(logger, prefix\u003d\u0027one\u0027), prefix\u003d\u0027two\u0027))\n    \n    self.logger \u003d magic_function(logger)\n    self.logger.set_prefix(\u0027one\u0027)","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":496,"context_line":"    def __init__(self, watcher_class, watcher_name, conf, logger):"},{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger.clone()"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"009acdf3_e78ac105","line":499,"in_reply_to":"b5f1792f_09e8e7a8","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger.clone()"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9cee6c4a_d601a13f","line":500,"updated":"2024-10-16 18:04:35.000000000","message":"self.logger \u003d clone_legacy_with_statsd_and_prefix(logger, prefix\u003d...)","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        self.watcher_name \u003d watcher_name"},{"line_number":498,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":499,"context_line":"        self.logger \u003d logger.clone()"},{"line_number":500,"context_line":"        self.logger.set_prefix(\u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":501,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"72dc34f8_e924c684","line":500,"in_reply_to":"9cee6c4a_d601a13f","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":490,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":491,"context_line":"    in the plugins."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    :param logger: an instance of ``SwiftLogAdapter``."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    \"\"\""},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"75b5f2b5_92e465b8","line":493,"range":{"start_line":493,"start_character":34,"end_line":493,"end_character":53},"updated":"2024-10-24 10:57:30.000000000","message":"yes! nice and clear\n\nbut, as a bonus, could you also add the other params","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":490,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":491,"context_line":"    in the plugins."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    :param logger: an instance of ``SwiftLogAdapter``."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    \"\"\""},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"d8bf9265_f01905e0","line":493,"range":{"start_line":493,"start_character":34,"end_line":493,"end_character":53},"in_reply_to":"75b5f2b5_92e465b8","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d get_prefixed_logger("},{"line_number":501,"context_line":"            logger, \u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        try:"},{"line_number":505,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa82df2d_784173c3","line":502,"updated":"2024-10-24 10:57:30.000000000","message":"looks like this line needs to be removed ;-)","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        self.watcher_in_error \u003d False"},{"line_number":500,"context_line":"        self.logger \u003d get_prefixed_logger("},{"line_number":501,"context_line":"            logger, \u0027[audit-watcher %s] \u0027 % watcher_name)"},{"line_number":502,"context_line":"        self.logger.increment(\u0027test\u0027)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        try:"},{"line_number":505,"context_line":"            self.watcher \u003d watcher_class(conf, self.logger)"}],"source_content_type":"text/x-python","patch_set":10,"id":"921879a3_7937a0da","line":502,"in_reply_to":"fa82df2d_784173c3","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":490,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":491,"context_line":"    in the plugins."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    :param logger: an instance of ``SwiftLogAdapter``."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    \"\"\""},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"2a1f3bd3_6722922b","line":493,"updated":"2024-11-13 12:47:40.000000000","message":"nit: there\u0027s a good citizenship badge available for adding the other missing params to the docstring","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":490,"context_line":"    to isolate ourselves from hangs or file descriptor leaks"},{"line_number":491,"context_line":"    in the plugins."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    :param logger: an instance of ``SwiftLogAdapter``."},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    \"\"\""},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"8ee1c2f3_646e4fcf","line":493,"in_reply_to":"2a1f3bd3_6722922b","updated":"2024-11-13 20:55:25.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"}],"swift/obj/reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":157,"context_line":"    def __init__(self, conf, logger\u003dNone):"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        :param conf: configuration object obtained from ConfigParser"},{"line_number":160,"context_line":"        :param logger: logging object"},{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        self.conf \u003d conf"},{"line_number":163,"context_line":"        self.logger \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fe74348_75393836","line":160,"range":{"start_line":160,"start_character":23,"end_line":160,"end_character":30},"updated":"2024-10-03 17:51:38.000000000","message":"we should make this more specific - \n\n```\n:param logger: an instance of ``SwiftLogAdapter``.\n```","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def __init__(self, conf, logger\u003dNone):"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        :param conf: configuration object obtained from ConfigParser"},{"line_number":160,"context_line":"        :param logger: logging object"},{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        self.conf \u003d conf"},{"line_number":163,"context_line":"        self.logger \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"a8a8aefc_c7d63a83","line":160,"range":{"start_line":160,"start_character":23,"end_line":160,"end_character":30},"in_reply_to":"1fe74348_75393836","updated":"2024-10-03 19:23:11.000000000","message":"Acknowledged","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        self.conf \u003d conf"},{"line_number":163,"context_line":"        self.logger \u003d \\"},{"line_number":164,"context_line":"            logger or get_logger(conf, log_route\u003d\u0027object-reconstructor\u0027)"},{"line_number":165,"context_line":"        self.devices_dir \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":166,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":167,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfe1082d_3ae4380e","line":164,"updated":"2024-10-08 18:10:43.000000000","message":"we believe that `.set_prefix` was only ever called in a forked worker.","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        self.conf \u003d conf"},{"line_number":163,"context_line":"        self.logger \u003d \\"},{"line_number":164,"context_line":"            logger or get_logger(conf, log_route\u003d\u0027object-reconstructor\u0027)"},{"line_number":165,"context_line":"        self.devices_dir \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":166,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":167,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f6cd98e_e7d53c12","line":164,"in_reply_to":"dfe1082d_3ae4380e","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    def run_once(self, multiprocess_worker_index\u003dNone, *args, **kwargs):"},{"line_number":1524,"context_line":"        if multiprocess_worker_index is not None:"},{"line_number":1525,"context_line":"            self._emplace_log_prefix(multiprocess_worker_index)"},{"line_number":1526,"context_line":"        start \u003d time.time()"},{"line_number":1527,"context_line":"        self.logger.info(\"Running object reconstructor in script mode.\")"},{"line_number":1528,"context_line":"        override_opts \u003d parse_override_options(once\u003dTrue, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1e40e772_21c9e234","line":1525,"updated":"2024-10-16 18:04:35.000000000","message":"self.logger \u003d get_prefixed_logger(self.logger, multiprocess_worker_index)","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    def run_once(self, multiprocess_worker_index\u003dNone, *args, **kwargs):"},{"line_number":1524,"context_line":"        if multiprocess_worker_index is not None:"},{"line_number":1525,"context_line":"            self._emplace_log_prefix(multiprocess_worker_index)"},{"line_number":1526,"context_line":"        start \u003d time.time()"},{"line_number":1527,"context_line":"        self.logger.info(\"Running object reconstructor in script mode.\")"},{"line_number":1528,"context_line":"        override_opts \u003d parse_override_options(once\u003dTrue, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9b3fa569_58562af4","line":1525,"in_reply_to":"1e40e772_21c9e234","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":793,"context_line":""},{"line_number":794,"context_line":"    def _emplace_log_prefix(self, worker_index):"},{"line_number":795,"context_line":"        self.logger.set_prefix(\"[worker %d/%d pid\u003d%s] \" % ("},{"line_number":796,"context_line":"            worker_index + 1,  # use 1-based indexing for more readable logs"},{"line_number":797,"context_line":"            self.reconstructor_workers,"},{"line_number":798,"context_line":"            os.getpid()))"},{"line_number":799,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"de284e9f_390b5c21","side":"PARENT","line":796,"range":{"start_line":796,"start_character":31,"end_line":796,"end_character":76},"updated":"2024-10-24 10:57:30.000000000","message":"Can we keep the comment - it avoids somebody one day thinking this was a bug","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":793,"context_line":""},{"line_number":794,"context_line":"    def _emplace_log_prefix(self, worker_index):"},{"line_number":795,"context_line":"        self.logger.set_prefix(\"[worker %d/%d pid\u003d%s] \" % ("},{"line_number":796,"context_line":"            worker_index + 1,  # use 1-based indexing for more readable logs"},{"line_number":797,"context_line":"            self.reconstructor_workers,"},{"line_number":798,"context_line":"            os.getpid()))"},{"line_number":799,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"e1542420_0a5faffa","side":"PARENT","line":796,"range":{"start_line":796,"start_character":31,"end_line":796,"end_character":76},"in_reply_to":"de284e9f_390b5c21","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"}],"swift/obj/replicator.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de895a8b43607351d596136b37b775b9dc6b5ccf","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    def __init__(self, conf, logger\u003dNone):"},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        :param conf: configuration object obtained from ConfigParser"},{"line_number":129,"context_line":"        :param logger: logging object"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        self.conf \u003d conf"},{"line_number":132,"context_line":"        self.logger \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1dbf248f_04f8d941","line":129,"range":{"start_line":129,"start_character":23,"end_line":129,"end_character":37},"updated":"2024-10-03 17:51:38.000000000","message":"we should make this more specific - \n\n```\n:param logger: an instance of ``SwiftLogAdapter``.\n```","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"390ba1c04da5a774bee003df96162d8844de0a60","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def __init__(self, conf, logger\u003dNone):"},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        :param conf: configuration object obtained from ConfigParser"},{"line_number":129,"context_line":"        :param logger: logging object"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        self.conf \u003d conf"},{"line_number":132,"context_line":"        self.logger \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"33fd61b4_df361916","line":129,"range":{"start_line":129,"start_character":23,"end_line":129,"end_character":37},"in_reply_to":"1dbf248f_04f8d941","updated":"2024-10-03 19:23:11.000000000","message":"Acknowledged","commit_id":"0c414a8411793fd95cdc92bf6e8196a49bff159b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        self.conf \u003d conf"},{"line_number":132,"context_line":"        self.logger \u003d \\"},{"line_number":133,"context_line":"            logger or get_logger(conf, log_route\u003d\u0027object-replicator\u0027)"},{"line_number":134,"context_line":"        self.devices_dir \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":135,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":136,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c33eddfa_039b0957","line":133,"updated":"2024-10-08 18:10:43.000000000","message":"we believe that `.set_prefix` was only ever called in a forked worker.","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        self.conf \u003d conf"},{"line_number":132,"context_line":"        self.logger \u003d \\"},{"line_number":133,"context_line":"            logger or get_logger(conf, log_route\u003d\u0027object-replicator\u0027)"},{"line_number":134,"context_line":"        self.devices_dir \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":135,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":136,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"4fed1ce7_993e5032","line":133,"in_reply_to":"c33eddfa_039b0957","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _emplace_log_prefix(self, worker_index):"},{"line_number":218,"context_line":"        self.logger.set_prefix(\"[worker %d/%d pid\u003d%d] \" % ("},{"line_number":219,"context_line":"            worker_index + 1,  # use 1-based indexing for more readable logs"},{"line_number":220,"context_line":"            self.replicator_workers,"},{"line_number":221,"context_line":"            os.getpid()))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"6cedf2c7_abe070d5","side":"PARENT","line":219,"range":{"start_line":219,"start_character":31,"end_line":219,"end_character":76},"updated":"2024-10-24 10:57:30.000000000","message":"same as reconstructor, please retain this comment","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _emplace_log_prefix(self, worker_index):"},{"line_number":218,"context_line":"        self.logger.set_prefix(\"[worker %d/%d pid\u003d%d] \" % ("},{"line_number":219,"context_line":"            worker_index + 1,  # use 1-based indexing for more readable logs"},{"line_number":220,"context_line":"            self.replicator_workers,"},{"line_number":221,"context_line":"            os.getpid()))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"698f892f_63bdf359","side":"PARENT","line":219,"range":{"start_line":219,"start_character":31,"end_line":219,"end_character":76},"in_reply_to":"6cedf2c7_abe070d5","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"}],"test/debug_logger.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c8bc87bd474765ec26e9a79a4bd4f5ce5d4a64b4","unresolved":true,"context_lines":[{"line_number":325,"context_line":"    accessor methods (e.g. get_lines_for_level) directly on the logger"},{"line_number":326,"context_line":"    instance."},{"line_number":327,"context_line":"    \"\"\""},{"line_number":328,"context_line":"    with mock.patch(\u0027swift.common.utils.SwiftLogAdapter\u0027, CaptureLogAdapter):"},{"line_number":329,"context_line":"        log_adapter \u003d utils.logs.get_logger(conf, *args, **kwargs)"},{"line_number":330,"context_line":"    log_adapter.start_capture()"},{"line_number":331,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"99a594e5_16194bda","line":328,"range":{"start_line":328,"start_character":21,"end_line":328,"end_character":55},"updated":"2024-10-02 03:43:33.000000000","message":"I think this needs the full `swift.common.utils.logs.SwiftLogAdapter` since that\u0027s what `get_logger` would know it as.","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    accessor methods (e.g. get_lines_for_level) directly on the logger"},{"line_number":326,"context_line":"    instance."},{"line_number":327,"context_line":"    \"\"\""},{"line_number":328,"context_line":"    with mock.patch(\u0027swift.common.utils.SwiftLogAdapter\u0027, CaptureLogAdapter):"},{"line_number":329,"context_line":"        log_adapter \u003d utils.logs.get_logger(conf, *args, **kwargs)"},{"line_number":330,"context_line":"    log_adapter.start_capture()"},{"line_number":331,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"eec26a69_52d51b3b","line":328,"range":{"start_line":328,"start_character":21,"end_line":328,"end_character":55},"in_reply_to":"99a594e5_16194bda","updated":"2024-10-03 12:37:22.000000000","message":"Done","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":325,"context_line":"    accessor methods (e.g. get_lines_for_level) directly on the logger"},{"line_number":326,"context_line":"    instance."},{"line_number":327,"context_line":"    \"\"\""},{"line_number":328,"context_line":"    with mock.patch(\u0027swift.common.utils.logs.SwiftLogAdapter\u0027,"},{"line_number":329,"context_line":"                    CaptureLogAdapter):"},{"line_number":330,"context_line":"        log_adapter \u003d utils.logs.get_logger(conf, *args, **kwargs)"},{"line_number":331,"context_line":"    log_adapter.start_capture()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1c59d508_2d8af8dc","line":328,"updated":"2024-10-08 18:10:43.000000000","message":"I think this module should consistently use the fully qualified `utils.logs.SwiftLogAdapter` - above we use the `common.utils.SwiftLogAdapter` alias which should not be needed.","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    accessor methods (e.g. get_lines_for_level) directly on the logger"},{"line_number":326,"context_line":"    instance."},{"line_number":327,"context_line":"    \"\"\""},{"line_number":328,"context_line":"    with mock.patch(\u0027swift.common.utils.logs.SwiftLogAdapter\u0027,"},{"line_number":329,"context_line":"                    CaptureLogAdapter):"},{"line_number":330,"context_line":"        log_adapter \u003d utils.logs.get_logger(conf, *args, **kwargs)"},{"line_number":331,"context_line":"    log_adapter.start_capture()"}],"source_content_type":"text/x-python","patch_set":6,"id":"a244eac3_ec734543","line":328,"in_reply_to":"1c59d508_2d8af8dc","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"}],"test/probe/test_reconstructor_rebuild.py":[{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"5870f8739edd4a53da57af7c11d1ca646180306b","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            reconstructor \u003d self.run_custom_daemon("},{"line_number":427,"context_line":"                ObjectReconstructor, \u0027object-reconstructor\u0027, conf_index,"},{"line_number":428,"context_line":"                {\u0027quarantine_age\u0027: \u00270\u0027})"},{"line_number":429,"context_line":"            logger \u003d reconstructor.logger.logger"},{"line_number":430,"context_line":"            error_lines.append(logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":431,"context_line":"            warning_lines.append(logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"949e36be_6379d337","side":"PARENT","line":429,"range":{"start_line":429,"start_character":42,"end_line":429,"end_character":48},"updated":"2024-10-03 14:01:28.000000000","message":"Failing probe tests, hence this change.\n\nFAILED ../probe/test_reconstructor_rebuild.py::TestReconstructorRebuild::test_rebuild_quarantines_lonely_frag - AttributeError: \u0027Logger\u0027 object has no attribute \u0027get_lines_for_level\u0027","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":426,"context_line":"            reconstructor \u003d self.run_custom_daemon("},{"line_number":427,"context_line":"                ObjectReconstructor, \u0027object-reconstructor\u0027, conf_index,"},{"line_number":428,"context_line":"                {\u0027quarantine_age\u0027: \u00270\u0027})"},{"line_number":429,"context_line":"            logger \u003d reconstructor.logger"},{"line_number":430,"context_line":"            error_lines.append(logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":431,"context_line":"            warning_lines.append(logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"391290a4_8b7d1eeb","line":429,"updated":"2024-10-24 10:57:30.000000000","message":"ok this makes sense because we no longer wrap the SwiftLogAdapter inside a PrefixedLogAdapter in the constructor","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            reconstructor \u003d self.run_custom_daemon("},{"line_number":427,"context_line":"                ObjectReconstructor, \u0027object-reconstructor\u0027, conf_index,"},{"line_number":428,"context_line":"                {\u0027quarantine_age\u0027: \u00270\u0027})"},{"line_number":429,"context_line":"            logger \u003d reconstructor.logger"},{"line_number":430,"context_line":"            error_lines.append(logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":431,"context_line":"            warning_lines.append(logger.get_lines_for_level(\u0027warning\u0027))"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bd266cab_0f6b5067","line":429,"in_reply_to":"391290a4_8b7d1eeb","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"}],"test/unit/common/test_daemon.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    def test_create(self):"},{"line_number":60,"context_line":"        d \u003d daemon.Daemon({})"},{"line_number":61,"context_line":"        self.assertEqual(d.conf, {})"},{"line_number":62,"context_line":"        self.assertIsInstance(d.logger, utils.SwiftLogAdapter)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_stubs(self):"},{"line_number":65,"context_line":"        d \u003d daemon.Daemon({})"}],"source_content_type":"text/x-python","patch_set":6,"id":"a0f8d689_7b9c31d0","line":62,"updated":"2024-10-08 18:10:43.000000000","message":"I see no reason not to use the fully qualified `utils.logs.SwiftLogAdapter` name here","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def test_create(self):"},{"line_number":60,"context_line":"        d \u003d daemon.Daemon({})"},{"line_number":61,"context_line":"        self.assertEqual(d.conf, {})"},{"line_number":62,"context_line":"        self.assertIsInstance(d.logger, utils.SwiftLogAdapter)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_stubs(self):"},{"line_number":65,"context_line":"        d \u003d daemon.Daemon({})"}],"source_content_type":"text/x-python","patch_set":6,"id":"e074a432_b6f334eb","line":62,"in_reply_to":"a0f8d689_7b9c31d0","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"}],"test/unit/common/test_internal_client.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.SwiftLogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"02a735c8_5dc26739","line":532,"updated":"2024-10-08 18:10:43.000000000","message":"doesn\u0027t `debug_logger` already return an adapted logger?\n\nThis WOMM\n\n```\ndiff --git a/test/unit/common/test_internal_client.py b/test/unit/common/test_internal_client.py\nindex ffd7cdc03..774edc6d8 100644\n--- a/test/unit/common/test_internal_client.py\n+++ b/test/unit/common/test_internal_client.py\n@@ -25,8 +25,7 @@ from textwrap import dedent\n import six\n from six.moves import range, zip_longest\n from six.moves.urllib.parse import quote, parse_qsl\n-from swift.common import exceptions, internal_client, request_helpers, swob, \\\n-    utils\n+from swift.common import exceptions, internal_client, request_helpers, swob\n from swift.common.header_key_dict import HeaderKeyDict\n from swift.common.storage_policy import StoragePolicy\n from swift.common.middleware.proxy_logging import ProxyLoggingMiddleware\n@@ -528,8 +527,7 @@ class TestInternalClient(unittest.TestCase):\n                 self.request_tries \u003d 1\n                 self.use_replication_network \u003d False\n \n-        fake_logger \u003d debug_logger()\n-        logger \u003d utils.SwiftLogAdapter(fake_logger, \u0027test-server\u0027)\n+        logger \u003d debug_logger()\n         # Make sure there\u0027s no transaction ID set -- other tests may have\n         # polluted the logger\n         logger.txn_id \u003d None\n@@ -538,7 +536,7 @@ class TestInternalClient(unittest.TestCase):\n         client.make_request(\u0027GET\u0027, \u0027/\u0027, {}, (200,))\n         logger.debug(\u0027After request\u0027)\n         self.assertEqual([(args[0], kwargs[\u0027extra\u0027].get(\u0027txn_id\u0027))\n-                          for args, kwargs in fake_logger.log_dict[\u0027debug\u0027]], [\n+                          for args, kwargs in logger.log_dict[\u0027debug\u0027]], [\n             (\u0027Before request\u0027, None),\n             (\u0027Inside of request\u0027, \u0027foo\u0027),\n             (\u0027After request\u0027, None),\n```","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.SwiftLogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"53658d00_ee6c0d60","line":532,"in_reply_to":"02a735c8_5dc26739","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.LogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"ee8aeeed_2626ba87","side":"PARENT","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":61},"updated":"2024-10-24 10:57:30.000000000","message":"was this just always unnecessary, or has the patch required this change?","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.LogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"d6c0168f_a0293863","side":"PARENT","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":61},"in_reply_to":"ee8aeeed_2626ba87","updated":"2024-10-24 15:37:33.000000000","message":"This patch required the change.","commit_id":"a427d2754f2b5ff48d0fd72e08824369e035c84e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57eff4c67738ea98538f330a81511d0899a02cff","unresolved":true,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.LogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"b291a7d9_af1c279e","side":"PARENT","line":532,"updated":"2024-11-05 19:58:13.000000000","message":"I wonder why we wrapped it before... Good riddance!","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                self.use_replication_network \u003d False"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        fake_logger \u003d debug_logger()"},{"line_number":532,"context_line":"        logger \u003d utils.LogAdapter(fake_logger, \u0027test-server\u0027)"},{"line_number":533,"context_line":"        # Make sure there\u0027s no transaction ID set -- other tests may have"},{"line_number":534,"context_line":"        # polluted the logger"},{"line_number":535,"context_line":"        logger.txn_id \u003d None"}],"source_content_type":"text/x-python","patch_set":14,"id":"f6eb84da_2febe1ab","side":"PARENT","line":532,"in_reply_to":"b291a7d9_af1c279e","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"}],"test/unit/common/test_statsd_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":821,"context_line":"        self.assertEqual([], warn_lines)"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"class TestSwiftLogAdapterDelegation(unittest.TestCase):"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def setUp(self):"},{"line_number":827,"context_line":"        self.logger \u003d utils.get_logger({\u0027log_statsd_host\u0027: \u0027some.host.com\u0027},"}],"source_content_type":"text/x-python","patch_set":20,"id":"0aecd154_77dbc232","line":824,"updated":"2024-11-13 12:47:40.000000000","message":"nit: I didn\u0027t expect to see these tests in this module, rather than test_utils.py. Whilst they are making assertions about statsd metrics, they are testing *utils* and *logs* module functions and classes.","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"}],"test/unit/common/utils/test_logs.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bfee5eb3b134b9b440b2dcce4f1a644b2562f12a","unresolved":true,"context_lines":[{"line_number":695,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @reset_logger_state"},{"line_number":698,"context_line":"    def test_swiftlogger(self):"},{"line_number":699,"context_line":"        # setup stream logging"},{"line_number":700,"context_line":"        sio \u003d StringIO()"},{"line_number":701,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a7584d7c_90f504c4","line":698,"updated":"2024-10-02 08:56:06.000000000","message":"I think this test is specifically testing the ``set_prefix`` method so could be renamed ``test_swift_log_set_prefix``","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e0032febfe8d39883b8726c170a61704f197f5b0","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    @reset_logger_state"},{"line_number":698,"context_line":"    def test_swiftlogger(self):"},{"line_number":699,"context_line":"        # setup stream logging"},{"line_number":700,"context_line":"        sio \u003d StringIO()"},{"line_number":701,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"680321f8_672a9545","line":698,"in_reply_to":"a7584d7c_90f504c4","updated":"2024-10-03 12:37:22.000000000","message":"Done","commit_id":"39f1105849e4efbd83bcc2a63c22453e14689185"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":702,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":703,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":704,"context_line":"        logger \u003d utils.PrefixLoggerAdapter(base_logger, {})"},{"line_number":705,"context_line":"        logger.set_prefix(\u0027some prefix: \u0027)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        def strip_value(sio):"},{"line_number":708,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ea1d3879_afef4fa6","side":"PARENT","line":705,"updated":"2024-10-08 18:10:43.000000000","message":"the logger object returned by `get_logger` already has a `set_prefix` method - there\u0027s no reason to rewrap:\n\n\n```\ndiff --git a/test/unit/common/utils/test_logs.py b/test/unit/common/utils/test_logs.py\nindex dd8730234..354cafdd0 100644\n--- a/test/unit/common/utils/test_logs.py\n+++ b/test/unit/common/utils/test_logs.py\n@@ -698,10 +698,9 @@ class TestUtilsLogs(unittest.TestCase):\n     def test_swift_log_set_prefix(self):\n         # setup stream logging\n         sio \u003d StringIO()\n-        base_logger \u003d utils.get_logger(None)\n+        logger \u003d utils.get_logger(None)\n         handler \u003d logging.StreamHandler(sio)\n-        base_logger.logger.addHandler(handler)\n-        logger \u003d utils.SwiftLogAdapter(base_logger, {})\n+        logger.logger.addHandler(handler)\n         logger.set_prefix(\u0027some prefix: \u0027)\n \n         def strip_value(sio):\n@@ -742,7 +741,7 @@ class TestUtilsLogs(unittest.TestCase):\n             self.assertEqual(\u0027some prefix: \u0027, log_msg[:13])\n \n         finally:\n-            base_logger.logger.removeHandler(handler)\n+            logger.logger.removeHandler(handler)\n \n     @reset_logger_state\n     def test_swift_log_set_prefix_non_string_values(self):\n```","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":703,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":704,"context_line":"        logger \u003d utils.PrefixLoggerAdapter(base_logger, {})"},{"line_number":705,"context_line":"        logger.set_prefix(\u0027some prefix: \u0027)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        def strip_value(sio):"},{"line_number":708,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8b35d0e4_25aeedf6","side":"PARENT","line":705,"in_reply_to":"ea1d3879_afef4fa6","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":1007,"context_line":"    def test_thread_locals(self):"},{"line_number":1008,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1009,"context_line":"        adapter1 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1010,"context_line":"        adapter2 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1011,"context_line":"        locals1 \u003d (\u0027tx_123\u0027, \u00271.2.3.4\u0027)"},{"line_number":1012,"context_line":"        adapter1.thread_locals \u003d locals1"},{"line_number":1013,"context_line":"        self.assertEqual(adapter1.thread_locals, locals1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c250705b_0d767f1f","side":"PARENT","line":1010,"updated":"2024-10-08 18:10:43.000000000","message":"this is somewhat curious in that `get_logger` used to return a utils.LogAdapter and we wrapped it in a `utils.SwiftLoggerAdapter`\n\n... now `get_logger` returns a `logs.SwiftLogAdapter` and we double wrap it in the same `logs.SwiftLogAdapter` - but thread locals still bleed across.\n\nI think there\u0027s a subtle \"fix\" in here for an \"undefined\" behavior of SwiftLogAdapter/PrefixLoggedAdapter when using the property setters.  You might try rebasing on these tests:\n\n931831: tests: confused about SwiftLoggerAdapter thread_locals | https://review.opendev.org/c/openstack/swift/+/931831","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"    def test_thread_locals(self):"},{"line_number":1008,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1009,"context_line":"        adapter1 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1010,"context_line":"        adapter2 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1011,"context_line":"        locals1 \u003d (\u0027tx_123\u0027, \u00271.2.3.4\u0027)"},{"line_number":1012,"context_line":"        adapter1.thread_locals \u003d locals1"},{"line_number":1013,"context_line":"        self.assertEqual(adapter1.thread_locals, locals1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d6c879e6_bca198f3","side":"PARENT","line":1010,"in_reply_to":"c250705b_0d767f1f","updated":"2024-10-09 21:24:58.000000000","message":"Acknowledged","commit_id":"29b0e478a737655251e595a81c61548933abdbf7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":810,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: test\\n\u0027)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"            outer_logger.info(\u0027test\u0027)"},{"line_number":813,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: two: test\\n\u0027)"},{"line_number":814,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":815,"context_line":"        finally:"},{"line_number":816,"context_line":"            base_logger.logger.removeHandler(handler)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c0795439_5d64bd12","line":813,"updated":"2024-10-08 18:10:43.000000000","message":"this use-case seems to suggest that we want `get_prefix_logger` to return a \"wrapped adapter\" rather than \"just\" a \"wrapper logger\" - but FWIW I\u0027m not sure we ever do this outside of this test.","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":810,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: test\\n\u0027)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"            outer_logger.info(\u0027test\u0027)"},{"line_number":813,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: two: test\\n\u0027)"},{"line_number":814,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":815,"context_line":"        finally:"},{"line_number":816,"context_line":"            base_logger.logger.removeHandler(handler)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c5c62009_dbab85fa","line":813,"in_reply_to":"c0795439_5d64bd12","updated":"2024-10-16 18:04:35.000000000","message":"N.B. we\u0027re not going to make `prefix` *addative*\n\n```\ndef magic_func(logger, prefix):\n    new_logger \u003d SwiftLogAdapter(logger.logger, logger.server, prefix\u003dprefix)\n    patch_statsd_interface(new_logger, logger)\n    return new_logger\n```\n\nif you WANT an addative prefix you can spell that:\n\n```\nmy_logger \u003d magic_func(logger, logger.prefix + \u0027wtf?\u0027)\n```","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: test\\n\u0027)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"            outer_logger.info(\u0027test\u0027)"},{"line_number":813,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: two: test\\n\u0027)"},{"line_number":814,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":815,"context_line":"        finally:"},{"line_number":816,"context_line":"            base_logger.logger.removeHandler(handler)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8d36e1d3_0ffcea9b","line":813,"in_reply_to":"c5c62009_dbab85fa","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"efb4a7d7164ebad5cbce70f483b8f088f744c9e7","unresolved":true,"context_lines":[{"line_number":1079,"context_line":"        self.assertEqual(logger.thread_locals, (\u00275678\u0027, \u00275.6.7.8\u0027))"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"    def test_exception(self):"},{"line_number":1082,"context_line":"        # verify that the adapter routes exception calls to utils.LogAdapter"},{"line_number":1083,"context_line":"        # for special case handling"},{"line_number":1084,"context_line":"        logger \u003d utils.get_logger({})"},{"line_number":1085,"context_line":"        adapter \u003d utils.SwiftLogAdapter(logger, {})"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f0af4ca_dde594ba","line":1082,"updated":"2024-10-08 18:10:43.000000000","message":"utils.LogAdapter doesn\u0027t exist anymore","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"65457acc410fc6ee1609e8af4f4de88b08c4e53d","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        self.assertEqual(logger.thread_locals, (\u00275678\u0027, \u00275.6.7.8\u0027))"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"    def test_exception(self):"},{"line_number":1082,"context_line":"        # verify that the adapter routes exception calls to utils.LogAdapter"},{"line_number":1083,"context_line":"        # for special case handling"},{"line_number":1084,"context_line":"        logger \u003d utils.get_logger({})"},{"line_number":1085,"context_line":"        adapter \u003d utils.SwiftLogAdapter(logger, {})"}],"source_content_type":"text/x-python","patch_set":6,"id":"32deccab_d03bc8df","line":1082,"in_reply_to":"3f0af4ca_dde594ba","updated":"2024-10-09 21:24:58.000000000","message":"Done","commit_id":"f81c1cda3c4210ac8443f0fa391c8ed3a1cd9861"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":817,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    @reset_logger_state"},{"line_number":820,"context_line":"    def test_nested_swiftlogger(self):"},{"line_number":821,"context_line":"        # setup stream logging"},{"line_number":822,"context_line":"        sio \u003d StringIO()"},{"line_number":823,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"61972b16_46c512e4","line":820,"updated":"2024-10-16 18:04:35.000000000","message":"move this test to test_utils and name it \"test_get_cloned_logger_with_prefix\"","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":817,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    @reset_logger_state"},{"line_number":820,"context_line":"    def test_nested_swiftlogger(self):"},{"line_number":821,"context_line":"        # setup stream logging"},{"line_number":822,"context_line":"        sio \u003d StringIO()"},{"line_number":823,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5d713df7_949a283c","line":820,"in_reply_to":"61972b16_46c512e4","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":823,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":824,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":825,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":826,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":827,"context_line":"        inner_logger.set_prefix(\u0027one: \u0027)"},{"line_number":828,"context_line":"        outer_logger \u003d SwiftLogAdapter(inner_logger, {})"},{"line_number":829,"context_line":"        outer_logger.set_prefix(\u0027two: \u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"47610967_9a56b207","line":826,"updated":"2024-10-16 18:04:35.000000000","message":"this signture isn\u0027t correct anymore, our 2nd argument is \"server\" - where as a logging.LogAdapter second argument was \"extras\" (which we don\u0027t expose)\n\nhttps://github.com/python/cpython/blob/main/Lib/logging/__init__.py#L1852\n\nshould these use `.clone` - do we want to support \"nesting\" at all?  Can we *prevent* nesting?","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":823,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":824,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":825,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":826,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":827,"context_line":"        inner_logger.set_prefix(\u0027one: \u0027)"},{"line_number":828,"context_line":"        outer_logger \u003d SwiftLogAdapter(inner_logger, {})"},{"line_number":829,"context_line":"        outer_logger.set_prefix(\u0027two: \u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"f05c79ac_f8c81313","line":826,"in_reply_to":"47610967_9a56b207","updated":"2024-10-22 13:28:01.000000000","message":"Acknowledged","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6093d4025a16d26aad276c5de1f099d588ebd2d2","unresolved":true,"context_lines":[{"line_number":844,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: two: test\\n\u0027)"},{"line_number":845,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":846,"context_line":"        finally:"},{"line_number":847,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    @reset_logger_state"},{"line_number":850,"context_line":"    def test_capture_stdio(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"8af55fd2_dbd1303c","line":847,"updated":"2024-10-16 18:04:35.000000000","message":"we should add some assertions to validate the outer_logger is still supports statsd_client methods.","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0f855a69abc83e0ab5e4471750f85d211752a067","unresolved":false,"context_lines":[{"line_number":844,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: two: test\\n\u0027)"},{"line_number":845,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":846,"context_line":"        finally:"},{"line_number":847,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    @reset_logger_state"},{"line_number":850,"context_line":"    def test_capture_stdio(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"d2edf180_d3b02ffe","line":847,"in_reply_to":"8af55fd2_dbd1303c","updated":"2024-10-22 13:28:01.000000000","message":"Done","commit_id":"c2d5e5c36c1fedc6093c9c47e8a6353f85292391"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":465,"context_line":"                conf, \u0027my_server\u0027, log_route\u003d\u0027my_logger_name\u0027)"},{"line_number":466,"context_line":"            adapted_logger.warning(\u0027test\u0027)"},{"line_number":467,"context_line":"        self.assertEqual(sio.getvalue(),"},{"line_number":468,"context_line":"                         \u0027WARNING: MY_SERVER test\\n\u0027)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    @reset_logger_state"},{"line_number":471,"context_line":"    def test_clean_logger_exception(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"73c16e5a_8dd1d2e6","line":468,"updated":"2024-10-24 10:57:30.000000000","message":"IIRC I contributed this because we were lacking coverage of the custom handler stuff ... I think it passes on master and could be a trivial pre-req patch","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                conf, \u0027my_server\u0027, log_route\u003d\u0027my_logger_name\u0027)"},{"line_number":466,"context_line":"            adapted_logger.warning(\u0027test\u0027)"},{"line_number":467,"context_line":"        self.assertEqual(sio.getvalue(),"},{"line_number":468,"context_line":"                         \u0027WARNING: MY_SERVER test\\n\u0027)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    @reset_logger_state"},{"line_number":471,"context_line":"    def test_clean_logger_exception(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"52d2ea5a_f9b45fab","line":468,"in_reply_to":"73c16e5a_8dd1d2e6","updated":"2024-10-24 15:37:33.000000000","message":"Yes that is true. It is for the lacking coverage of the custom handler stuff","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":728,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    @reset_logger_state"},{"line_number":731,"context_line":"    def test_swift_log_set_prefix(self):"},{"line_number":732,"context_line":"        # setup stream logging"},{"line_number":733,"context_line":"        sio \u003d StringIO()"},{"line_number":734,"context_line":"        logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"125d40e1_5e417950","line":731,"updated":"2024-10-24 10:57:30.000000000","message":"probably better named ``test_get_prefixed_logger``","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    @reset_logger_state"},{"line_number":731,"context_line":"    def test_swift_log_set_prefix(self):"},{"line_number":732,"context_line":"        # setup stream logging"},{"line_number":733,"context_line":"        sio \u003d StringIO()"},{"line_number":734,"context_line":"        logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"405f0fa6_f0bdae4d","line":731,"in_reply_to":"125d40e1_5e417950","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":777,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    @reset_logger_state"},{"line_number":780,"context_line":"    def test_swift_log_set_prefix_non_string_values(self):"},{"line_number":781,"context_line":"        # setup stream logging"},{"line_number":782,"context_line":"        sio \u003d StringIO()"},{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1edda46e_1c141922","line":780,"range":{"start_line":780,"start_character":8,"end_line":780,"end_character":51},"updated":"2024-10-24 10:57:30.000000000","message":"ditto: rename test_get_prefixed_logger_non_string_values","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":777,"context_line":"            logger.logger.removeHandler(handler)"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    @reset_logger_state"},{"line_number":780,"context_line":"    def test_swift_log_set_prefix_non_string_values(self):"},{"line_number":781,"context_line":"        # setup stream logging"},{"line_number":782,"context_line":"        sio \u003d StringIO()"},{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"29fc859e_9bc3b4c9","line":780,"range":{"start_line":780,"start_character":8,"end_line":780,"end_character":51},"in_reply_to":"1edda46e_1c141922","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"c735fb858d1872929c7892014e5fa5c93738b697","unresolved":false,"context_lines":[{"line_number":818,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    @reset_logger_state"},{"line_number":821,"context_line":"    def test_get_cloned_logger_with_prefix(self):"},{"line_number":822,"context_line":"        # setup stream logging"},{"line_number":823,"context_line":"        sio \u003d StringIO()"},{"line_number":824,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"e11a8cd7_0a446b31","line":821,"range":{"start_line":821,"start_character":8,"end_line":821,"end_character":42},"updated":"2024-10-22 14:40:09.000000000","message":"Also a good idea to move these tests to utils in the next patch when get_prefixed_logger moves.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    @reset_logger_state"},{"line_number":821,"context_line":"    def test_get_cloned_logger_with_prefix(self):"},{"line_number":822,"context_line":"        # setup stream logging"},{"line_number":823,"context_line":"        sio \u003d StringIO()"},{"line_number":824,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"d044d06f_d939ca8f","line":821,"range":{"start_line":821,"start_character":8,"end_line":821,"end_character":42},"updated":"2024-10-24 10:57:30.000000000","message":"I think that this test is demonstrating that get_prefixed_logger replaces rather than appends the prefix. As such, it would be better named test_get_prefixed_logger_replaces_prefix","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":818,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    @reset_logger_state"},{"line_number":821,"context_line":"    def test_get_cloned_logger_with_prefix(self):"},{"line_number":822,"context_line":"        # setup stream logging"},{"line_number":823,"context_line":"        sio \u003d StringIO()"},{"line_number":824,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ac861e14_998ae7ae","line":821,"range":{"start_line":821,"start_character":8,"end_line":821,"end_character":42},"in_reply_to":"d044d06f_d939ca8f","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":824,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"22c9c033_cbe51153","line":827,"range":{"start_line":827,"start_character":8,"end_line":827,"end_character":55},"updated":"2024-10-24 10:57:30.000000000","message":"this line doesn\u0027t seem necessary or appropriate - base_logger is a SwiftLogAdapter","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":824,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ad956eb1_e3736919","line":827,"range":{"start_line":827,"start_character":8,"end_line":827,"end_character":55},"in_reply_to":"22c9c033_cbe51153","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"}],"source_content_type":"text/x-python","patch_set":10,"id":"a7f7d090_322f43cd","line":828,"range":{"start_line":828,"start_character":8,"end_line":828,"end_character":13},"updated":"2024-10-24 10:57:30.000000000","message":"the inner/outer naming is a hangover from when this was testing *nested* loggers. `logger_1`` and ``logger_2`` might be better now.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"}],"source_content_type":"text/x-python","patch_set":10,"id":"504d0978_ac000a1c","line":828,"range":{"start_line":828,"start_character":8,"end_line":828,"end_character":13},"in_reply_to":"a7f7d090_322f43cd","updated":"2024-10-24 15:37:33.000000000","message":"Acknowledged","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"},{"line_number":832,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"376dc382_cbec4a48","line":829,"updated":"2024-10-24 10:57:30.000000000","message":"ok, so what we\u0027re testing is that if you pass get_prefixed_logger a logger which has prefix \u0027one\u0027, then \u0027one\u0027 gets replaced with \u0027two\u0027.","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        inner_logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(inner_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        outer_logger \u003d get_prefixed_logger(inner_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"},{"line_number":832,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1e5cc217_d23a2b87","line":829,"in_reply_to":"376dc382_cbec4a48","updated":"2024-10-24 15:37:33.000000000","message":"Yes exactly!","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":1135,"context_line":"        self.assertEqual(logger.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1136,"context_line":"        self.assertEqual(adapter.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    def test_get_cloned_prefixed_logger(self):"},{"line_number":1139,"context_line":"        adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":1140,"context_line":"        adapted_logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1141,"context_line":"        adapted_logger \u003d get_prefixed_logger(adapted_logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7cc208d5_3b54732f","line":1138,"range":{"start_line":1138,"start_character":17,"end_line":1138,"end_character":24},"updated":"2024-10-24 10:57:30.000000000","message":"nit: ``cloned_`` could be dropped from the test name\n\nThis overlaps somewhat with ``test_get_cloned_logger_with_prefix`` but here we make assertions about the prefix other attributes, whereas the other test actually checks logged messages. \nI\u0027m OK with the overlap.\n\nHowever, this no longer belongs in TestSwiftLogAdapter because it is now testing get_prefixed_logger function (which is going to move) so perhaps move it adjacent to the other get_prefixed_logger methods above so they all get moved together?","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        self.assertEqual(logger.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1136,"context_line":"        self.assertEqual(adapter.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"    def test_get_cloned_prefixed_logger(self):"},{"line_number":1139,"context_line":"        adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":1140,"context_line":"        adapted_logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1141,"context_line":"        adapted_logger \u003d get_prefixed_logger(adapted_logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ed3b3041_cf2ad393","line":1138,"range":{"start_line":1138,"start_character":17,"end_line":1138,"end_character":24},"in_reply_to":"7cc208d5_3b54732f","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":1144,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1147,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027boo\u0027)"},{"line_number":1148,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":1149,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":1150,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027fooboo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"6460c4de_26918049","line":1147,"range":{"start_line":1147,"start_character":28,"end_line":1147,"end_character":57},"updated":"2024-10-24 10:57:30.000000000","message":"we could just give a new prefix \u0027boo\u0027","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1147,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027boo\u0027)"},{"line_number":1148,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":1149,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":1150,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027fooboo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"20bcea51_ab6c5cf0","line":1147,"range":{"start_line":1147,"start_character":28,"end_line":1147,"end_character":57},"in_reply_to":"6460c4de_26918049","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":1146,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1147,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027boo\u0027)"},{"line_number":1148,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":1149,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":1150,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027fooboo\u0027)"},{"line_number":1151,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":1152,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7cc16b74_ca8231d5","line":1149,"updated":"2024-10-24 10:57:30.000000000","message":"ok. so we\u0027re asserting that the clone has inherited the server, txn_id and client_ip but has a new prefix. good to cover this 👍","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1147,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027boo\u0027)"},{"line_number":1148,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":1149,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":1150,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027fooboo\u0027)"},{"line_number":1151,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":1152,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"2fca7401_a0ab182c","line":1149,"in_reply_to":"7cc16b74_ca8231d5","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":1151,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1154,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027bar\u0027)"},{"line_number":1155,"context_line":"        adapted_logger.server \u003d \u0027waiter\u0027"},{"line_number":1156,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":1157,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a1daebc4_2a980272","line":1154,"updated":"2024-10-24 10:57:30.000000000","message":"ok. now we clone the clone and test that its prefix is *replaced* 👍","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":1151,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1154,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027bar\u0027)"},{"line_number":1155,"context_line":"        adapted_logger.server \u003d \u0027waiter\u0027"},{"line_number":1156,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":1157,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"f9ae46a3_d6b737e6","line":1154,"in_reply_to":"a1daebc4_2a980272","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8151d0d939fdb7de27b23a5b1fbd78041aeefe88","unresolved":true,"context_lines":[{"line_number":1153,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1154,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027bar\u0027)"},{"line_number":1155,"context_line":"        adapted_logger.server \u003d \u0027waiter\u0027"},{"line_number":1156,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":1157,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"},{"line_number":1158,"context_line":"        self.assertEqual(adapted_logger.server, \u0027waiter\u0027)"},{"line_number":1159,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"4b8a84d1_28f512f3","line":1156,"updated":"2024-10-24 10:57:30.000000000","message":"...and check that we can mutate the original attributes without changing the clone 👍","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"6b69ae71f85d2365ab1349d926b06d2a76cf709a","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":1154,"context_line":"            adapted_logger, adapted_logger.prefix + \u0027bar\u0027)"},{"line_number":1155,"context_line":"        adapted_logger.server \u003d \u0027waiter\u0027"},{"line_number":1156,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":1157,"context_line":"        self.assertEqual(adapted_logger.prefix, \u0027foo\u0027)"},{"line_number":1158,"context_line":"        self.assertEqual(adapted_logger.server, \u0027waiter\u0027)"},{"line_number":1159,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"553d9e66_9b8be538","line":1156,"in_reply_to":"4b8a84d1_28f512f3","updated":"2024-10-24 15:37:33.000000000","message":"Done","commit_id":"f89e468a9161fd031c4c7e0fd0e42cf02b13084c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a62e5efa6ba33e5c8876e76c86a27f4721c6c39b","unresolved":true,"context_lines":[{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        logger1 \u003d base_logger"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(logger1, \u0027one: \u0027)"},{"line_number":829,"context_line":"        logger2 \u003d get_prefixed_logger(logger1, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1c30a5dc_d273dad6","line":828,"updated":"2024-10-25 11:33:20.000000000","message":"not sure I understand why this isn\u0027t\n\n```\nlogger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)\n```","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"2822f9b32077fc5dd14d450c4e1e2719140e5594","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":826,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":827,"context_line":"        logger1 \u003d base_logger"},{"line_number":828,"context_line":"        inner_logger \u003d get_prefixed_logger(logger1, \u0027one: \u0027)"},{"line_number":829,"context_line":"        logger2 \u003d get_prefixed_logger(logger1, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"}],"source_content_type":"text/x-python","patch_set":12,"id":"17974a96_5c96fe7b","line":828,"in_reply_to":"1c30a5dc_d273dad6","updated":"2024-10-25 13:26:13.000000000","message":"I forgot to rename that variable. Surprisingly, no tests failed because I did not rename it elsewhere. Changed and resolved!","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a62e5efa6ba33e5c8876e76c86a27f4721c6c39b","unresolved":true,"context_lines":[{"line_number":845,"context_line":"        finally:"},{"line_number":846,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_get__prefixed_logger(self):"},{"line_number":849,"context_line":"        adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":850,"context_line":"        adapted_logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":851,"context_line":"        adapted_logger \u003d get_prefixed_logger(adapted_logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"829c1c14_af8bdc7b","line":848,"range":{"start_line":848,"start_character":8,"end_line":848,"end_character":33},"updated":"2024-10-25 11:33:20.000000000","message":"ok, so moving this resulted in a test name clash, but the double underscore is a bit too subtle to distinguish from ``test_get_prefixed_logger``\n\nhow about ``test_get_prefixed_logger_isolation`` since this tests digs more into the isolation of the cloned logger\u0027s attributes?","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"2822f9b32077fc5dd14d450c4e1e2719140e5594","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        finally:"},{"line_number":846,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_get__prefixed_logger(self):"},{"line_number":849,"context_line":"        adapted_logger \u003d utils.get_logger(None, name\u003d\u0027server\u0027)"},{"line_number":850,"context_line":"        adapted_logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":851,"context_line":"        adapted_logger \u003d get_prefixed_logger(adapted_logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"272a89eb_d05dc17c","line":848,"range":{"start_line":848,"start_character":8,"end_line":848,"end_character":33},"in_reply_to":"829c1c14_af8bdc7b","updated":"2024-10-25 13:26:13.000000000","message":"That sounds resonable","commit_id":"791c831dbc0bb3ab29a527caee0d59a65c6ee331"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":751,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":752,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":753,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":754,"context_line":"        inner_logger \u003d utils.PrefixLoggerAdapter(base_logger, {})"},{"line_number":755,"context_line":"        inner_logger.set_prefix(\u0027one: \u0027)"},{"line_number":756,"context_line":"        outer_logger \u003d utils.PrefixLoggerAdapter(inner_logger, {})"},{"line_number":757,"context_line":"        outer_logger.set_prefix(\u0027two: \u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a8b8992_e07d2a18","side":"PARENT","line":754,"updated":"2024-11-05 18:34:53.000000000","message":"FWIW the `__init__` signature of a PrefixedLoggerAdapter is *not* the same as the `__init__` signature of a SwiftLogAdapter","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":751,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":752,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":753,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":754,"context_line":"        inner_logger \u003d utils.PrefixLoggerAdapter(base_logger, {})"},{"line_number":755,"context_line":"        inner_logger.set_prefix(\u0027one: \u0027)"},{"line_number":756,"context_line":"        outer_logger \u003d utils.PrefixLoggerAdapter(inner_logger, {})"},{"line_number":757,"context_line":"        outer_logger.set_prefix(\u0027two: \u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f7700403_a3a26ca3","side":"PARENT","line":754,"in_reply_to":"1a8b8992_e07d2a18","updated":"2024-11-06 22:23:14.000000000","message":"Acknowledged","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"class TestSwiftLoggerAdapter(unittest.TestCase):"},{"line_number":1006,"context_line":"    @reset_logger_state"},{"line_number":1007,"context_line":"    def test_thread_locals(self):"},{"line_number":1008,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1009,"context_line":"        adapter1 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1010,"context_line":"        adapter2 \u003d utils.SwiftLoggerAdapter(logger, {})"}],"source_content_type":"text/x-python","patch_set":14,"id":"f6baa928_669d56a9","side":"PARENT","line":1007,"updated":"2024-11-06 11:18:31.000000000","message":"this was testing behavior of thread_locals across multiple instances","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"class TestSwiftLoggerAdapter(unittest.TestCase):"},{"line_number":1006,"context_line":"    @reset_logger_state"},{"line_number":1007,"context_line":"    def test_thread_locals(self):"},{"line_number":1008,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1009,"context_line":"        adapter1 \u003d utils.SwiftLoggerAdapter(logger, {})"},{"line_number":1010,"context_line":"        adapter2 \u003d utils.SwiftLoggerAdapter(logger, {})"}],"source_content_type":"text/x-python","patch_set":14,"id":"a6e1a226_6122f26b","side":"PARENT","line":1007,"in_reply_to":"f6baa928_669d56a9","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"        logger.thread_locals \u003d (None, None)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    @reset_logger_state"},{"line_number":1025,"context_line":"    def test_thread_locals_more(self):"},{"line_number":1026,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1027,"context_line":"        # test the setter"},{"line_number":1028,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9eac10a3_10e6e2c3","side":"PARENT","line":1025,"updated":"2024-11-06 11:18:31.000000000","message":"this was testing behavior of thread_locals on a single instance","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"        logger.thread_locals \u003d (None, None)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    @reset_logger_state"},{"line_number":1025,"context_line":"    def test_thread_locals_more(self):"},{"line_number":1026,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1027,"context_line":"        # test the setter"},{"line_number":1028,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7067b2d5_c6a7ae2a","side":"PARENT","line":1025,"in_reply_to":"9eac10a3_10e6e2c3","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"288677695dbc24730f4f7f114dc2c6c418057cc4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":787,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":788,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ab88c7aa_cee3e611","line":786,"updated":"2024-11-05 18:34:53.000000000","message":"this is weird, we\u0027re passing an empty dict as the \"server\" param!?","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":787,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":788,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"53d0b965_fcb1d854","line":786,"in_reply_to":"2f421cd7_a577b225","updated":"2024-11-06 22:23:14.000000000","message":"Changed to \n        logger \u003d SwiftLogAdapter(base_logger, \u0027my-server\u0027)","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger, {})"},{"line_number":787,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":788,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"2f421cd7_a577b225","line":786,"in_reply_to":"ab88c7aa_cee3e611","updated":"2024-11-06 11:18:31.000000000","message":"Darn, I thought I\u0027d caught all of those :( It is as you say an error that crept in because the old PrefixLoggerdapter constructor signature is different to SwiftLogAdapter","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":856,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":857,"context_line":"            adapted_logger, \u0027boo\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":859,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":860,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027boo\u0027)"},{"line_number":861,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":862,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"8f9eaefc_fe8ed395","line":859,"updated":"2024-11-05 18:34:53.000000000","message":"so this behavior looks weird in a test method named \"test isolation\" - this is saying that the cloned_adapted_logger inherts the thread_locals of the parent.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":856,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":857,"context_line":"            adapted_logger, \u0027boo\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":859,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":860,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027boo\u0027)"},{"line_number":861,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":862,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"78c6cbf1_3698c8f3","line":859,"in_reply_to":"82f271c8_bf4c1886","updated":"2024-11-06 22:23:14.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57eff4c67738ea98538f330a81511d0899a02cff","unresolved":true,"context_lines":[{"line_number":856,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":857,"context_line":"            adapted_logger, \u0027boo\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":859,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":860,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027boo\u0027)"},{"line_number":861,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":862,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"963c5653_dc88f2e6","line":859,"in_reply_to":"8f9eaefc_fe8ed395","updated":"2024-11-05 19:58:13.000000000","message":"Well, the storage hangs off the class, not the instance. FWIW, I see the test name as saying \"this tests how much isolation `get_prefixed_logger` provides\", rather than \"this tests that `get_prefixed_logger` provides complete isolation\".","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":856,"context_line":"        cloned_adapted_logger \u003d get_prefixed_logger("},{"line_number":857,"context_line":"            adapted_logger, \u0027boo\u0027)"},{"line_number":858,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":859,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"},{"line_number":860,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027boo\u0027)"},{"line_number":861,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":862,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"82f271c8_bf4c1886","line":859,"in_reply_to":"963c5653_dc88f2e6","updated":"2024-11-06 11:18:31.000000000","message":"Re the name of the test: what Tim said, it\u0027s testing what is isolated and what isn\u0027t. I\u0027m happy with it but open to suggestions for a better name. Note that we already used plain old ``test_get_prefixed_logger`` above.\n\nMaybe add a comment at line 849:\n\n```\n# verify that the new instance\u0027s attributes are copied by value from the\n# old (except prefix), but the thread_locals are still shared\n```","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":868,"context_line":"        self.assertEqual(adapted_logger.server, \u0027waiter\u0027)"},{"line_number":869,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":870,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027foobar\u0027)"},{"line_number":871,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":872,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":873,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":874,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"50d6a93d_0ba5566a","line":871,"updated":"2024-11-05 18:34:53.000000000","message":"*this* attribute appears \"isolated\" in that changing the adapted logger\u0027s server attribute does NOT effect the value of the cloned_adpated_logger server (which is copied by value during init)","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e8140b6e6236892242d5f5ff83277f6e99c7059e","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        self.assertEqual(adapted_logger.server, \u0027waiter\u0027)"},{"line_number":869,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":870,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027foobar\u0027)"},{"line_number":871,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":872,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":873,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":874,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"b807e8ae_799627db","line":871,"in_reply_to":"50d6a93d_0ba5566a","updated":"2024-11-08 15:00:24.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":869,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":870,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027foobar\u0027)"},{"line_number":871,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":872,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":873,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"    @reset_logger_state"}],"source_content_type":"text/x-python","patch_set":14,"id":"66921997_3cd7b5b4","line":872,"updated":"2024-11-05 18:34:53.000000000","message":"but this is showing us that the mutating the thread_locals of the parent `adapted_logger` effects the \"cloned\" logger as well!\n\nthat\u0027s like the opposite of isolation?!","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e6fc6d0063a746022c39b6d1752e599dae18998d","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":870,"context_line":"        self.assertEqual(cloned_adapted_logger.prefix, \u0027foobar\u0027)"},{"line_number":871,"context_line":"        self.assertEqual(cloned_adapted_logger.server, \u0027server\u0027)"},{"line_number":872,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":873,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"    @reset_logger_state"}],"source_content_type":"text/x-python","patch_set":14,"id":"460dced6_6b6f9b39","line":872,"in_reply_to":"66921997_3cd7b5b4","updated":"2024-11-08 20:10:40.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":"    def test_init(self):"},{"line_number":1106,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1107,"context_line":"        adapter \u003d SwiftLogAdapter(logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1108,"context_line":"        self.assertEqual(\u0027my-server\u0027, adapter.server)"},{"line_number":1109,"context_line":"        self.assertEqual(\u0027my-prefix\u0027, adapter.prefix)"},{"line_number":1110,"context_line":"        self.assertIs(logger, adapter.logger)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f166918f_ae62d52f","line":1107,"updated":"2024-11-05 18:34:53.000000000","message":"I think it\u0027s kind of unusual to create a SwiftLogAdapter from a SwiftLogAdapter - but maybe useful to point out that it\u0027s *possible*\n\nExcept it turns out it doesn\u0027t really *work* (at least not with statds methods):\n\n934170: fix \u0027n sq? test ideas | https://review.opendev.org/c/openstack/swift/+/934170\n\n... so maybe we don\u0027t need to test this case?","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":"    def test_init(self):"},{"line_number":1106,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1107,"context_line":"        adapter \u003d SwiftLogAdapter(logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1108,"context_line":"        self.assertEqual(\u0027my-server\u0027, adapter.server)"},{"line_number":1109,"context_line":"        self.assertEqual(\u0027my-prefix\u0027, adapter.prefix)"},{"line_number":1110,"context_line":"        self.assertIs(logger, adapter.logger)"}],"source_content_type":"text/x-python","patch_set":14,"id":"0f608fe1_00ce5012","line":1107,"in_reply_to":"00589f8e_7ce664e6","updated":"2024-11-06 22:23:14.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":"    def test_init(self):"},{"line_number":1106,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1107,"context_line":"        adapter \u003d SwiftLogAdapter(logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1108,"context_line":"        self.assertEqual(\u0027my-server\u0027, adapter.server)"},{"line_number":1109,"context_line":"        self.assertEqual(\u0027my-prefix\u0027, adapter.prefix)"},{"line_number":1110,"context_line":"        self.assertIs(logger, adapter.logger)"}],"source_content_type":"text/x-python","patch_set":14,"id":"00589f8e_7ce664e6","line":1107,"in_reply_to":"f166918f_ae62d52f","updated":"2024-11-06 11:18:31.000000000","message":"IMHO this is a mistake, the test should construct SwiftLogAdapter using a logging.Logger, because I\u0027d expect this test to cover the most straightforward use of the constructor.\n\nlogging.LoggerAdapter is designed to stack, but if we want to support/test that then it should be a different test case.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":1113,"context_line":"    def test_thread_locals(self):"},{"line_number":1114,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1115,"context_line":"        adapter1 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1116,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1117,"context_line":"        locals1 \u003d (\u0027tx_123\u0027, \u00271.2.3.4\u0027)"},{"line_number":1118,"context_line":"        adapter1.thread_locals \u003d locals1"},{"line_number":1119,"context_line":"        self.assertEqual(adapter1.thread_locals, locals1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"4f61ed2d_19c76199","line":1116,"updated":"2024-11-05 18:34:53.000000000","message":"here again we\u0027re \"copying\" the signature of the old stdlib.LogAdapter/SwiftLoggerAdapter/PrefixLogAdapter but using SwiftLogAdapter instead which expects the second argument to be the value of the server attribute: which should never reasonably be a dict.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"    def test_thread_locals(self):"},{"line_number":1114,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1115,"context_line":"        adapter1 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1116,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1117,"context_line":"        locals1 \u003d (\u0027tx_123\u0027, \u00271.2.3.4\u0027)"},{"line_number":1118,"context_line":"        adapter1.thread_locals \u003d locals1"},{"line_number":1119,"context_line":"        self.assertEqual(adapter1.thread_locals, locals1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dd6c276f_d8049bb7","line":1116,"in_reply_to":"3d65077a_5fa6d34e","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":1113,"context_line":"    def test_thread_locals(self):"},{"line_number":1114,"context_line":"        logger \u003d utils.get_logger({}, \u0027foo\u0027)"},{"line_number":1115,"context_line":"        adapter1 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1116,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger, {})"},{"line_number":1117,"context_line":"        locals1 \u003d (\u0027tx_123\u0027, \u00271.2.3.4\u0027)"},{"line_number":1118,"context_line":"        adapter1.thread_locals \u003d locals1"},{"line_number":1119,"context_line":"        self.assertEqual(adapter1.thread_locals, locals1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3d65077a_5fa6d34e","line":1116,"in_reply_to":"4f61ed2d_19c76199","updated":"2024-11-06 11:18:31.000000000","message":"yep, and as above we should pass in a logging.Logger not a SwiftLogAdapter","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":1124,"context_line":"        self.assertEqual(\u0027tx_123\u0027, adapter1.txn_id)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, logger.client_ip)"},{"line_number":1127,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, adapter1.client_ip)"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        locals2 \u003d (\u0027tx_456\u0027, \u00271.2.3.456\u0027)"},{"line_number":1130,"context_line":"        logger.thread_locals \u003d locals2"}],"source_content_type":"text/x-python","patch_set":14,"id":"762d1cca_6300caad","line":1127,"updated":"2024-11-05 18:34:53.000000000","message":"ok, but I guess this \"non-isolation\" of thread_locals was expected/original behavior.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"        self.assertEqual(\u0027tx_123\u0027, adapter1.txn_id)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, logger.client_ip)"},{"line_number":1127,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, adapter1.client_ip)"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        locals2 \u003d (\u0027tx_456\u0027, \u00271.2.3.456\u0027)"},{"line_number":1130,"context_line":"        logger.thread_locals \u003d locals2"}],"source_content_type":"text/x-python","patch_set":14,"id":"acf4faf5_d14ca0d4","line":1127,"in_reply_to":"762d1cca_6300caad","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0f6c085325df06dd873d0d882fa85f646a76791b","unresolved":true,"context_lines":[{"line_number":1134,"context_line":"        logger.thread_locals \u003d (None, None)"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    @reset_logger_state"},{"line_number":1137,"context_line":"    def test_thread_locals_more(self):"},{"line_number":1138,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1139,"context_line":"        adapter \u003d utils.logs.SwiftLogAdapter(logger, {})"},{"line_number":1140,"context_line":"        # test the setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a321a6b_a4985c4e","line":1137,"updated":"2024-11-06 11:18:31.000000000","message":"the distinction between this test and test_thread_locals has blurred wr.t. master\n\nMaybe the new assertions in this test should be in a new ``test_thread_locals_stacked_adapter``","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"        logger.thread_locals \u003d (None, None)"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    @reset_logger_state"},{"line_number":1137,"context_line":"    def test_thread_locals_more(self):"},{"line_number":1138,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1139,"context_line":"        adapter \u003d utils.logs.SwiftLogAdapter(logger, {})"},{"line_number":1140,"context_line":"        # test the setter"}],"source_content_type":"text/x-python","patch_set":14,"id":"854f2e80_53a912f0","line":1137,"in_reply_to":"1a321a6b_a4985c4e","updated":"2024-11-06 22:23:14.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4726f9a49a315186c6bfb3696128e32e0794aaa9","unresolved":true,"context_lines":[{"line_number":1160,"context_line":"        adapter.txn_id \u003d \u00271234\u0027"},{"line_number":1161,"context_line":"        adapter.client_ip \u003d \u00271.2.3.4\u0027"},{"line_number":1162,"context_line":"        self.assertEqual(logger.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1163,"context_line":"        self.assertEqual(adapter.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    def test_exception(self):"},{"line_number":1166,"context_line":"        # verify that the adapter routes exception calls to SwiftLogAdapter"}],"source_content_type":"text/x-python","patch_set":14,"id":"8f204865_ab1ff344","line":1163,"updated":"2024-11-05 18:34:53.000000000","message":"i\u0027m glad to see this test!  very clear that thread_locals are copy-by-reference and proxy through adapted-adapters!","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"        adapter.txn_id \u003d \u00271234\u0027"},{"line_number":1161,"context_line":"        adapter.client_ip \u003d \u00271.2.3.4\u0027"},{"line_number":1162,"context_line":"        self.assertEqual(logger.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1163,"context_line":"        self.assertEqual(adapter.thread_locals, (\u00271234\u0027, \u00271.2.3.4\u0027))"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    def test_exception(self):"},{"line_number":1166,"context_line":"        # verify that the adapter routes exception calls to SwiftLogAdapter"}],"source_content_type":"text/x-python","patch_set":14,"id":"386674b7_62cb3133","line":1163,"in_reply_to":"8f204865_ab1ff344","updated":"2024-11-06 22:23:14.000000000","message":"Done","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"310e12fb86c4b2b624b75acdade54ec71f23e214","unresolved":true,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger, \u0027my-server\u0027)"},{"line_number":787,"context_line":"        self.assertEqual(logger.server, \u0027my-server\u0027)"},{"line_number":788,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":789,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"53de8d65_21f1b280","line":786,"updated":"2024-11-07 21:07:26.000000000","message":"We\u0027re still wrapping a `SwiftLogAdapter` in another `SwiftLogAdapter` here -- why can\u0027t se just skip straight to something like\n```\nlogger \u003d get_prefixed_logger(base_logger, \u0027some prefix: \u0027)\n```\n? This seems to work for me:\n```\ndiff --git a/test/unit/common/utils/test_logs.py b/test/unit/common/utils/test_logs.py\nindex 3bd64b45c..4f9dec0f5 100644\n--- a/test/unit/common/utils/test_logs.py\n+++ b/test/unit/common/utils/test_logs.py\n@@ -780,12 +780,12 @@ class TestUtilsLogs(unittest.TestCase):\n     def test_get_prefixed_logger_non_string_values(self):\n         # setup stream logging\n         sio \u003d StringIO()\n-        base_logger \u003d utils.get_logger(None)\n+        base_logger \u003d utils.get_logger(None, \u0027my-server\u0027)\n         handler \u003d logging.StreamHandler(sio)\n         base_logger.logger.addHandler(handler)\n-        logger \u003d SwiftLogAdapter(base_logger, \u0027my-server\u0027)\n-        self.assertEqual(logger.server, \u0027my-server\u0027)\n-        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)\n+        self.assertEqual(base_logger.server, \u0027my-server\u0027)\n+        logger \u003d get_prefixed_logger(base_logger, \u0027some prefix: \u0027)\n+        self.assertEqual(logger.server, \u0027my-server\u0027)  # copied from original\n         exc \u003d Exception(\u0027blah\u0027)\n \n         def strip_value(sio):\n```","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e8140b6e6236892242d5f5ff83277f6e99c7059e","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger, \u0027my-server\u0027)"},{"line_number":787,"context_line":"        self.assertEqual(logger.server, \u0027my-server\u0027)"},{"line_number":788,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":789,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"0e37dd0f_191a432b","line":786,"in_reply_to":"53de8d65_21f1b280","updated":"2024-11-08 15:00:24.000000000","message":"Not wrapping it anymore. Instead doing a simple:\nlogger \u003d SwiftLogAdapter(base_logger.logger, \u0027my-server\u0027)","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"145708d2651ca0734c7e3bf7ce87350a657c427e","unresolved":false,"context_lines":[{"line_number":819,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"    @reset_logger_state"},{"line_number":822,"context_line":"    def test_get_prefixed_logger_replaces_prefix(self):"},{"line_number":823,"context_line":"        # setup stream logging"},{"line_number":824,"context_line":"        sio \u003d StringIO()"},{"line_number":825,"context_line":"        base_logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"cf0785e3_681b13a9","line":822,"range":{"start_line":822,"start_character":33,"end_line":822,"end_character":48},"updated":"2024-11-08 04:35:46.000000000","message":"A little funny, but I suppose it simplifies things. I don\u0027t expect anyone was relying on the behavior before, where prefixes would in some way stack. The fact that I don\u0027t even remember which *way* they stacked is a good sign that it wasn\u0027t great before, either.","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"145708d2651ca0734c7e3bf7ce87350a657c427e","unresolved":true,"context_lines":[{"line_number":825,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d base_logger"},{"line_number":829,"context_line":"        logger1 \u003d get_prefixed_logger(logger1, \u0027one: \u0027)"},{"line_number":830,"context_line":"        logger2 \u003d get_prefixed_logger(logger1, \u0027two: \u0027)"},{"line_number":831,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"6073d23a_1782210c","line":828,"updated":"2024-11-08 04:35:46.000000000","message":"nit: More clear to just say\n```\nlogger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)\n```\nbelow.","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e8140b6e6236892242d5f5ff83277f6e99c7059e","unresolved":false,"context_lines":[{"line_number":825,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d base_logger"},{"line_number":829,"context_line":"        logger1 \u003d get_prefixed_logger(logger1, \u0027one: \u0027)"},{"line_number":830,"context_line":"        logger2 \u003d get_prefixed_logger(logger1, \u0027two: \u0027)"},{"line_number":831,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"4638e5dd_c36a625c","line":828,"in_reply_to":"6073d23a_1782210c","updated":"2024-11-08 15:00:24.000000000","message":"Acknowledged","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"145708d2651ca0734c7e3bf7ce87350a657c427e","unresolved":true,"context_lines":[{"line_number":886,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":887,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))  # sanity"},{"line_number":888,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":889,"context_line":"        # because they share the global stdlib logger reference"},{"line_number":890,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    @reset_logger_state"}],"source_content_type":"text/x-python","patch_set":17,"id":"410e4a91_29513a0f","line":889,"updated":"2024-11-08 04:35:46.000000000","message":"Is that it? I thought it was because\n```\nadapted_logger._cls_thread_local is cloned_adapted_logger._cls_thread_local is SwiftLogAdapter._cls_thread_local\n```","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e6fc6d0063a746022c39b6d1752e599dae18998d","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        adapted_logger.thread_locals \u003d (\u0027x\u0027, \u0027y\u0027)"},{"line_number":887,"context_line":"        self.assertEqual(adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))  # sanity"},{"line_number":888,"context_line":"        self.assertEqual(cloned_adapted_logger.thread_locals, (\u0027x\u0027, \u0027y\u0027))"},{"line_number":889,"context_line":"        # because they share the global stdlib logger reference"},{"line_number":890,"context_line":"        self.assertIs(adapted_logger.logger, cloned_adapted_logger.logger)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    @reset_logger_state"}],"source_content_type":"text/x-python","patch_set":17,"id":"071437da_c2f2e78f","line":889,"in_reply_to":"410e4a91_29513a0f","updated":"2024-11-08 20:10:40.000000000","message":"Done","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e0eef949f5cf394f589a0e0702e091fdc6c35575","unresolved":true,"context_lines":[{"line_number":1131,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027my-adapter\u0027, \u0027other-prefix\u0027)"},{"line_number":1132,"context_line":"        self.assertIs(logger.logger, adapter2.logger)"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        # you can even wrap adapted-adapters, haha"},{"line_number":1135,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter, \u0027wrapped-adapter\u0027, \u0027final-prefix\u0027)"},{"line_number":1136,"context_line":"        self.assertIs(adapter, adapter3.logger)"},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3b2b1692_8a6333d5","line":1134,"updated":"2024-11-08 16:18:15.000000000","message":"These comments indicate that we really *did* want to pass a `SwiftLogAdapter` (rather than a stdlib `Logger`) -- and I think that\u0027d be a decent way to nest prefixes, if one really wanted.\n\nAs it is now, it\u0027s not clear to me how the tests on `adapter`, `adapter2`, and `adapter3` are materially different from each other.","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e6fc6d0063a746022c39b6d1752e599dae18998d","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027my-adapter\u0027, \u0027other-prefix\u0027)"},{"line_number":1132,"context_line":"        self.assertIs(logger.logger, adapter2.logger)"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        # you can even wrap adapted-adapters, haha"},{"line_number":1135,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter, \u0027wrapped-adapter\u0027, \u0027final-prefix\u0027)"},{"line_number":1136,"context_line":"        self.assertIs(adapter, adapter3.logger)"},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"4bf4bf82_374a14f3","line":1134,"in_reply_to":"3b2b1692_8a6333d5","updated":"2024-11-08 20:10:40.000000000","message":"Acknowledged, retaining the comments","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"310e12fb86c4b2b624b75acdade54ec71f23e214","unresolved":true,"context_lines":[{"line_number":1166,"context_line":"    @reset_logger_state"},{"line_number":1167,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1168,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1169,"context_line":"        adapter \u003d utils.logs.SwiftLogAdapter(logger, {})"},{"line_number":1170,"context_line":"        adapter2 \u003d utils.logs.SwiftLogAdapter(logger.logger, {})"},{"line_number":1171,"context_line":"        adapter3 \u003d utils.logs.SwiftLogAdapter(adapter, {})"},{"line_number":1172,"context_line":"        # test the setter"},{"line_number":1173,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1174,"context_line":"        self.assertEqual(logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"738a7450_571d8e5a","line":1171,"range":{"start_line":1169,"start_character":53,"end_line":1171,"end_character":57},"updated":"2024-11-07 21:07:26.000000000","message":"These ones still need proper `server` args.","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e8140b6e6236892242d5f5ff83277f6e99c7059e","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"    @reset_logger_state"},{"line_number":1167,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1168,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1169,"context_line":"        adapter \u003d utils.logs.SwiftLogAdapter(logger, {})"},{"line_number":1170,"context_line":"        adapter2 \u003d utils.logs.SwiftLogAdapter(logger.logger, {})"},{"line_number":1171,"context_line":"        adapter3 \u003d utils.logs.SwiftLogAdapter(adapter, {})"},{"line_number":1172,"context_line":"        # test the setter"},{"line_number":1173,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1174,"context_line":"        self.assertEqual(logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"ca537414_dccf1906","line":1171,"range":{"start_line":1169,"start_character":53,"end_line":1171,"end_character":57},"in_reply_to":"738a7450_571d8e5a","updated":"2024-11-08 15:00:24.000000000","message":"Acknowledged","commit_id":"96892c27a673bb88caa8f28d30d6f0cb4cb07ff4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e0eef949f5cf394f589a0e0702e091fdc6c35575","unresolved":true,"context_lines":[{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        logger2 \u003d get_prefixed_logger(base_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"},{"line_number":832,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":18,"id":"91412a8a_94af738e","line":829,"range":{"start_line":829,"start_character":38,"end_line":829,"end_character":49},"updated":"2024-11-08 16:18:15.000000000","message":"Oh, but *this* one I think we *did* want `logger1` -- to demonstrate that despite being based on `logger1`, `\"one: \"` is not present at all when logging through `logger2`.","commit_id":"a68d7df386fd5b781c6902c2803679e12e921da4"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"e6fc6d0063a746022c39b6d1752e599dae18998d","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":827,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":828,"context_line":"        logger1 \u003d get_prefixed_logger(base_logger, \u0027one: \u0027)"},{"line_number":829,"context_line":"        logger2 \u003d get_prefixed_logger(base_logger, \u0027two: \u0027)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        def strip_value(sio):"},{"line_number":832,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":18,"id":"13fc417d_bb9d43db","line":829,"range":{"start_line":829,"start_character":38,"end_line":829,"end_character":49},"in_reply_to":"91412a8a_94af738e","updated":"2024-11-08 20:10:40.000000000","message":"ah, you are right","commit_id":"a68d7df386fd5b781c6902c2803679e12e921da4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"633ab2a316386f8b17607f899a28a2bcbe44fc65","unresolved":true,"context_lines":[{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1114,"context_line":"        self.assertIsInstance(logger, SwiftLogAdapter)"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # you *can* wrap log adapters"},{"line_number":1117,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1118,"context_line":"        self.assertIs(logger.logger, adapter.logger)"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"c8661756_e68dac85","line":1116,"updated":"2024-11-08 21:11:46.000000000","message":"But we\u0027re *not* doing that here.","commit_id":"2d6e9be2064f74254a9123e7011755963f6c5ae5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4cac1d9db8cca233f8e5b0719b89b26b8f40f1e7","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1114,"context_line":"        self.assertIsInstance(logger, SwiftLogAdapter)"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":"        # you *can* wrap log adapters"},{"line_number":1117,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1118,"context_line":"        self.assertIs(logger.logger, adapter.logger)"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"082f698d_0e571c53","line":1116,"in_reply_to":"c8661756_e68dac85","updated":"2024-11-12 20:40:57.000000000","message":"Agree, I\u0027ll remove the comment","commit_id":"2d6e9be2064f74254a9123e7011755963f6c5ae5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4cac1d9db8cca233f8e5b0719b89b26b8f40f1e7","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027my-server\u0027, \u0027my-prefix\u0027)"},{"line_number":1118,"context_line":"        self.assertIs(logger.logger, adapter.logger)"},{"line_number":1119,"context_line":""},{"line_number":1120,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027my-adapter\u0027, \u0027other-prefix\u0027)"},{"line_number":1121,"context_line":"        self.assertIs(logger.logger, adapter2.logger)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"        # you can even wrap adapted-adapters, haha"}],"source_content_type":"text/x-python","patch_set":19,"id":"e5fcb5af_3cf24d43","line":1120,"range":{"start_line":1120,"start_character":8,"end_line":1120,"end_character":16},"updated":"2024-11-12 20:40:57.000000000","message":"adapter and adapter2 are pretty much the same thing. I\u0027ll remove one of them.","commit_id":"2d6e9be2064f74254a9123e7011755963f6c5ae5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"633ab2a316386f8b17607f899a28a2bcbe44fc65","unresolved":true,"context_lines":[{"line_number":1123,"context_line":"        # you can even wrap adapted-adapters, haha"},{"line_number":1124,"context_line":"        adapter3 \u003d SwiftLogAdapter("},{"line_number":1125,"context_line":"            adapter.logger, \u0027wrapped-adapter\u0027, \u0027final-prefix\u0027)"},{"line_number":1126,"context_line":"        self.assertIs(adapter.logger, adapter3.logger)"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"        self.assertEqual(\u0027swift\u0027, logger.server)"},{"line_number":1129,"context_line":"        self.assertEqual(\u0027my-server\u0027, adapter.server)"}],"source_content_type":"text/x-python","patch_set":19,"id":"05ef8796_1f4ebae7","line":1126,"updated":"2024-11-08 21:11:46.000000000","message":"Since we\u0027re keeping the comments, we should be passing `adapter` instead of `adapter.logger`","commit_id":"2d6e9be2064f74254a9123e7011755963f6c5ae5"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"4cac1d9db8cca233f8e5b0719b89b26b8f40f1e7","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"        # you can even wrap adapted-adapters, haha"},{"line_number":1124,"context_line":"        adapter3 \u003d SwiftLogAdapter("},{"line_number":1125,"context_line":"            adapter.logger, \u0027wrapped-adapter\u0027, \u0027final-prefix\u0027)"},{"line_number":1126,"context_line":"        self.assertIs(adapter.logger, adapter3.logger)"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"        self.assertEqual(\u0027swift\u0027, logger.server)"},{"line_number":1129,"context_line":"        self.assertEqual(\u0027my-server\u0027, adapter.server)"}],"source_content_type":"text/x-python","patch_set":19,"id":"f814a00a_cd627550","line":1126,"in_reply_to":"05ef8796_1f4ebae7","updated":"2024-11-12 20:40:57.000000000","message":"Agree, we previously intended to wrap adapters but we dont recommend that anymore. I\u0027ll remove the comment just.","commit_id":"2d6e9be2064f74254a9123e7011755963f6c5ae5"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":734,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":735,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":736,"context_line":"        logger.logger.addHandler(handler)"},{"line_number":737,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        def strip_value(sio):"},{"line_number":740,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":20,"id":"cacfe475_b6c5fd14","line":737,"updated":"2024-11-13 12:47:40.000000000","message":"there\u0027s no need to re-use the var ``logger`` and it is potentially confusing - I suggest the first logger is named ``base_logger`` like the next test","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":734,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":735,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":736,"context_line":"        logger.logger.addHandler(handler)"},{"line_number":737,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        def strip_value(sio):"},{"line_number":740,"context_line":"            sio.seek(0)"}],"source_content_type":"text/x-python","patch_set":20,"id":"f890c211_7ed7237a","line":737,"in_reply_to":"cacfe475_b6c5fd14","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger.logger, \u0027my-server\u0027)"},{"line_number":787,"context_line":"        self.assertEqual(logger.server, \u0027my-server\u0027)"},{"line_number":788,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":789,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"8f29c461_182d5df6","line":786,"updated":"2024-11-13 12:47:40.000000000","message":"this still seems weird:\n\n* ``base_logger`` is a SwiftLogAdapter\n* we just want to test get_prefixed_logger() - this test is similar to the previous, but has this extra unnecessary step of creating another SwiftLogAdapter.\n\nWe can just do similar to the previous test:\n\n```\nlogger \u003d get_prefixed_logger(base_logger, \u0027some prefix: \u0027)\n```","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        base_logger \u003d utils.get_logger(None)"},{"line_number":784,"context_line":"        handler \u003d logging.StreamHandler(sio)"},{"line_number":785,"context_line":"        base_logger.logger.addHandler(handler)"},{"line_number":786,"context_line":"        logger \u003d SwiftLogAdapter(base_logger.logger, \u0027my-server\u0027)"},{"line_number":787,"context_line":"        self.assertEqual(logger.server, \u0027my-server\u0027)"},{"line_number":788,"context_line":"        logger \u003d get_prefixed_logger(logger, \u0027some prefix: \u0027)"},{"line_number":789,"context_line":"        exc \u003d Exception(\u0027blah\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"38a6b1dd_520bdebe","line":786,"in_reply_to":"8f29c461_182d5df6","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":834,"context_line":"            sio.truncate(0)"},{"line_number":835,"context_line":"            return v"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        try:"},{"line_number":838,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":839,"context_line":"            logger1.info(\u0027test\u0027)"},{"line_number":840,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: test\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"0a820635_19794a0c","line":837,"updated":"2024-11-13 12:47:40.000000000","message":"for completeness we could assert the output from base_logger - check that its prefix hasn\u0027t been mutated","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            sio.truncate(0)"},{"line_number":835,"context_line":"            return v"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        try:"},{"line_number":838,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":839,"context_line":"            logger1.info(\u0027test\u0027)"},{"line_number":840,"context_line":"            self.assertEqual(strip_value(sio), \u0027one: test\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"f8b65539_78f1e1d9","line":837,"in_reply_to":"0a820635_19794a0c","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":841,"context_line":""},{"line_number":842,"context_line":"            logger2.info(\u0027test\u0027)"},{"line_number":843,"context_line":"            self.assertEqual(strip_value(sio), \u0027two: test\\n\u0027)"},{"line_number":844,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":845,"context_line":"        finally:"},{"line_number":846,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":847,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"42fb2412_78f4b420","line":844,"updated":"2024-11-13 12:47:40.000000000","message":"this should probably be at line 842 to check the buffer is empty *before* calling info()","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":841,"context_line":""},{"line_number":842,"context_line":"            logger2.info(\u0027test\u0027)"},{"line_number":843,"context_line":"            self.assertEqual(strip_value(sio), \u0027two: test\\n\u0027)"},{"line_number":844,"context_line":"            self.assertEqual(strip_value(sio), \u0027\u0027)"},{"line_number":845,"context_line":"        finally:"},{"line_number":846,"context_line":"            base_logger.logger.removeHandler(handler)"},{"line_number":847,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"e08c06cd_87f2a883","line":844,"in_reply_to":"42fb2412_78f4b420","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1107,"context_line":"                                       \u0027md5\u0027, \u002754LT\u0027))"},{"line_number":1108,"context_line":""},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"class TestSwiftLogAdapter(unittest.TestCase):"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_init(self):"},{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ce9f1dd_931cadcc","line":1110,"updated":"2024-11-13 12:47:40.000000000","message":"this test class is for testing the SwiftLogAdapter unit. get_logger() should not be appearing in these tests.\n\nWe don\u0027t need to use get_logger() just to get an instance of logging.Logger.\n\nThe TestUtilsLogs class does use get_logger() and also makes assertions about SwiftLogAdapter that is returned: that is a hangover from the legacy tests, and that\u0027s ok for now, but this class should evolve towards direct testing of the SwiftLogAdapter.","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                                       \u0027md5\u0027, \u002754LT\u0027))"},{"line_number":1108,"context_line":""},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"class TestSwiftLogAdapter(unittest.TestCase):"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_init(self):"},{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"}],"source_content_type":"text/x-python","patch_set":20,"id":"e8678f26_20060ae9","line":1110,"in_reply_to":"1ce9f1dd_931cadcc","updated":"2024-11-13 20:55:25.000000000","message":"https://review.opendev.org/c/openstack/swift/+/931060/comments/c4a755f5_b06e62d3 hence changed. I agree that logging.Logger is a better way to get a logger.","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"class TestSwiftLogAdapter(unittest.TestCase):"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_init(self):"},{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1114,"context_line":"        self.assertIsInstance(logger, SwiftLogAdapter)"},{"line_number":1115,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"0aa07044_2747e43c","line":1112,"updated":"2024-11-13 12:47:40.000000000","message":"test_init is typically testing the simplest usage of the class-under-test constructor","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"class TestSwiftLogAdapter(unittest.TestCase):"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"    def test_init(self):"},{"line_number":1113,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1114,"context_line":"        self.assertIsInstance(logger, SwiftLogAdapter)"},{"line_number":1115,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"436b0de3_0a24685a","line":1112,"in_reply_to":"0aa07044_2747e43c","updated":"2024-11-13 20:55:25.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1117,"context_line":"        self.assertIs(logger.logger, adapter1.logger)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"        adapter2 \u003d SwiftLogAdapter("},{"line_number":1120,"context_line":"            adapter1.logger, \u0027wrapped-adapter\u0027, \u0027other-prefix\u0027)"},{"line_number":1121,"context_line":"        self.assertIs(adapter1.logger, adapter2.logger)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"        self.assertEqual(\u0027swift\u0027, logger.server)"}],"source_content_type":"text/x-python","patch_set":20,"id":"46ee89e9_4d78c338","line":1120,"updated":"2024-11-13 12:47:40.000000000","message":"adapter2 is just another instance of SwiftLogAdapter that happens to have different parameters - that\u0027s just repeating the same assertions that are made on adapter1","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"        self.assertIs(logger.logger, adapter1.logger)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"        adapter2 \u003d SwiftLogAdapter("},{"line_number":1120,"context_line":"            adapter1.logger, \u0027wrapped-adapter\u0027, \u0027other-prefix\u0027)"},{"line_number":1121,"context_line":"        self.assertIs(adapter1.logger, adapter2.logger)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"        self.assertEqual(\u0027swift\u0027, logger.server)"}],"source_content_type":"text/x-python","patch_set":20,"id":"eeaf085c_e6e37c35","line":1120,"in_reply_to":"46ee89e9_4d78c338","updated":"2024-11-13 20:55:25.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"    @reset_logger_state"},{"line_number":1149,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"aa5aba37_a799a49b","line":1150,"updated":"2024-11-13 12:47:40.000000000","message":"again, no need to get_logger to get a SwiftLogAdapter and then reference its core logger. get_logger has nothing to do with the SwiftLogAdapter test unit.","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"    @reset_logger_state"},{"line_number":1149,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"2ea94168_d2354ed4","line":1150,"in_reply_to":"aa5aba37_a799a49b","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1149,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"},{"line_number":1154,"context_line":"        # test the setter"},{"line_number":1155,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"176021e1_a22ddd9f","line":1152,"updated":"2024-11-13 12:47:40.000000000","message":"adapter2 isn\u0027t stacked - IMHO including it here is just confusing this test - we test the sharing of thread_locals between \u0027sibling\u0027 instances in the previous test","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1149,"context_line":"    def test_thread_locals_stacked_adapter(self):"},{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"},{"line_number":1154,"context_line":"        # test the setter"},{"line_number":1155,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"a0259e6c_c61827be","line":1152,"in_reply_to":"176021e1_a22ddd9f","updated":"2024-11-13 20:55:25.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"},{"line_number":1154,"context_line":"        # test the setter"},{"line_number":1155,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1156,"context_line":"        self.assertEqual(logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"596aae73_d43f684f","line":1153,"updated":"2024-11-13 12:47:40.000000000","message":"adapter3 isn\u0027t stacked either:(","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"        logger \u003d utils.get_logger(None)"},{"line_number":1151,"context_line":"        adapter \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1152,"context_line":"        adapter2 \u003d SwiftLogAdapter(logger.logger, \u0027foo\u0027)"},{"line_number":1153,"context_line":"        adapter3 \u003d SwiftLogAdapter(adapter.logger, \u0027foo\u0027)"},{"line_number":1154,"context_line":"        # test the setter"},{"line_number":1155,"context_line":"        logger.thread_locals \u003d (\u0027id\u0027, \u0027ip\u0027)"},{"line_number":1156,"context_line":"        self.assertEqual(logger.thread_locals, (\u0027id\u0027, \u0027ip\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"2bb75292_773243ef","line":1153,"in_reply_to":"596aae73_d43f684f","updated":"2024-11-13 20:55:25.000000000","message":"Acknowledged","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05eb8bc68bbc391d9bb147e603f1d329e013f7d7","unresolved":true,"context_lines":[{"line_number":1190,"context_line":"        # verify that the adapter routes exception calls to SwiftLogAdapter"},{"line_number":1191,"context_line":"        # for special case handling"},{"line_number":1192,"context_line":"        logger \u003d logging.Logger({})"},{"line_number":1193,"context_line":"        adapter \u003d SwiftLogAdapter(logger, \u0027foo\u0027)"},{"line_number":1194,"context_line":"        try:"},{"line_number":1195,"context_line":"            raise OSError(errno.ECONNREFUSED, \u0027oserror\u0027)"},{"line_number":1196,"context_line":"        except OSError:"}],"source_content_type":"text/x-python","patch_set":20,"id":"8682ce8b_7743d0fd","line":1193,"updated":"2024-11-13 12:47:40.000000000","message":"yes, this is the appropriate pattern for this test class, but logging.Logger is not expecting a dict argument","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"0633dd218d70a3d4706277d0a3b0388feae82578","unresolved":false,"context_lines":[{"line_number":1190,"context_line":"        # verify that the adapter routes exception calls to SwiftLogAdapter"},{"line_number":1191,"context_line":"        # for special case handling"},{"line_number":1192,"context_line":"        logger \u003d logging.Logger({})"},{"line_number":1193,"context_line":"        adapter \u003d SwiftLogAdapter(logger, \u0027foo\u0027)"},{"line_number":1194,"context_line":"        try:"},{"line_number":1195,"context_line":"            raise OSError(errno.ECONNREFUSED, \u0027oserror\u0027)"},{"line_number":1196,"context_line":"        except OSError:"}],"source_content_type":"text/x-python","patch_set":20,"id":"f0dc3733_93f04040","line":1193,"in_reply_to":"8682ce8b_7743d0fd","updated":"2024-11-13 20:55:25.000000000","message":"Done","commit_id":"44fea4420e517b398bf02b9afc55fbc948a0da67"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"c81de27f54ec69477cb11ee9f3af3dd0aaa264ca","unresolved":true,"context_lines":[{"line_number":771,"context_line":"            log_exception(OSError())"},{"line_number":772,"context_line":"            log_msg \u003d strip_value(sio)"},{"line_number":773,"context_line":"            self.assertIn(\u0027Traceback\u0027, log_msg)"},{"line_number":774,"context_line":"            self.assertEqual(\u0027some prefix: \u0027, log_msg[:13])"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        finally:"},{"line_number":777,"context_line":"            base_logger.logger.removeHandler(handler)"}],"source_content_type":"text/x-python","patch_set":21,"id":"a52ae6b0_9e9ad44d","line":774,"updated":"2024-11-15 22:47:09.000000000","message":"I printed the ``log_msg`` here, and saw there are two ``some prefix: `` before the actual log message. is this expected? @shreeyad@nvidia.com @alistairncoles@gmail.com\n\n```\n-\u003e self.assertEqual(\u0027some prefix: \u0027, log_msg[:13])\n(Pdb) p log_msg\n\u0027some prefix: some prefix: blah: \\nTraceback (most recent call last):#012  File \"/vagrant/swift/test/unit/common/utils/test_logs.py\", line 747, in log_exception#012    raise exc#012OSError\\n\u0027\n```","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"862c89beb71cb12bc204e9217f62da9dc188f01e","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            log_exception(OSError())"},{"line_number":772,"context_line":"            log_msg \u003d strip_value(sio)"},{"line_number":773,"context_line":"            self.assertIn(\u0027Traceback\u0027, log_msg)"},{"line_number":774,"context_line":"            self.assertEqual(\u0027some prefix: \u0027, log_msg[:13])"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        finally:"},{"line_number":777,"context_line":"            base_logger.logger.removeHandler(handler)"}],"source_content_type":"text/x-python","patch_set":21,"id":"876b436f_40d06ca1","line":774,"in_reply_to":"a52ae6b0_9e9ad44d","updated":"2024-11-18 13:11:07.000000000","message":"Alistair added a fix in https://review.opendev.org/c/openstack/swift/+/935501","commit_id":"f88efdb4df37577c687f68b2cc3712465955c20e"}],"test/unit/obj/test_auditor.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"57eff4c67738ea98538f330a81511d0899a02cff","unresolved":true,"context_lines":[{"line_number":1702,"context_line":"        self.assertEqual(\u0027\u0027, my_auditor.logger.prefix)  # sanity check"},{"line_number":1703,"context_line":"        self.assertEqual(\u0027[audit-watcher test_watcher1] \u0027,"},{"line_number":1704,"context_line":"                         watcher_logger.prefix)"},{"line_number":1705,"context_line":"        self.assertIsInstance(calls[0][2], SwiftLogAdapter)"},{"line_number":1706,"context_line":"        self.assertIs(calls[0][2].logger, self.logger.logger)"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"        self.assertEqual(calls[1], [\"start\", \"ZBF\"])"}],"source_content_type":"text/x-python","patch_set":14,"id":"062a67d3_bd8e8569","line":1705,"updated":"2024-11-05 19:58:13.000000000","message":"We might want the `isinstance` check ahead of the attr assertions.","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"7e20fb398204d712e47907f015959d28d11bc62a","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"        self.assertEqual(\u0027\u0027, my_auditor.logger.prefix)  # sanity check"},{"line_number":1703,"context_line":"        self.assertEqual(\u0027[audit-watcher test_watcher1] \u0027,"},{"line_number":1704,"context_line":"                         watcher_logger.prefix)"},{"line_number":1705,"context_line":"        self.assertIsInstance(calls[0][2], SwiftLogAdapter)"},{"line_number":1706,"context_line":"        self.assertIs(calls[0][2].logger, self.logger.logger)"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"        self.assertEqual(calls[1], [\"start\", \"ZBF\"])"}],"source_content_type":"text/x-python","patch_set":14,"id":"fb2b1312_ba936ec6","line":1705,"in_reply_to":"062a67d3_bd8e8569","updated":"2024-11-06 22:23:14.000000000","message":"Acknowledged","commit_id":"ec8b868bb1368cfaaaaa8d0bf8699161e26738eb"}]}
