diff options
author | Richard van der Hoff <github@rvanderhoff.org.uk> | 2018-01-17 11:19:28 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-17 11:19:28 +0000 |
commit | 1067b9636453fac71f62a635014f799aa80a2d0f (patch) | |
tree | b7432d12406c90f67309ca96495da7d767bc47ec /synapse | |
parent | Merge pull request #2789 from matrix-org/erikj/fix_thumbnails (diff) | |
parent | Merge remote-tracking branch 'origin/develop' into rav/optimise_logging_context (diff) | |
download | synapse-1067b9636453fac71f62a635014f799aa80a2d0f.tar.xz |
Merge pull request #2792 from matrix-org/rav/optimise_logging_context
Optimise LoggingContext creation and copying
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/util/logcontext.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/synapse/util/logcontext.py b/synapse/util/logcontext.py index 48c9f6802d..ca71a1fc27 100644 --- a/synapse/util/logcontext.py +++ b/synapse/util/logcontext.py @@ -52,13 +52,16 @@ except Exception: class LoggingContext(object): """Additional context for log formatting. Contexts are scoped within a "with" block. + Args: name (str): Name for the context for debugging. """ __slots__ = [ - "previous_context", "name", "usage_start", "usage_end", "main_thread", - "__dict__", "tag", "alive", + "previous_context", "name", "ru_stime", "ru_utime", + "db_txn_count", "db_txn_duration", "usage_start", "usage_end", + "main_thread", "alive", + "request", "tag", ] thread_local = threading.local() @@ -96,7 +99,9 @@ class LoggingContext(object): self.db_txn_count = 0 self.db_txn_duration = 0. self.usage_start = None + self.usage_end = None self.main_thread = threading.current_thread() + self.request = None self.tag = "" self.alive = True @@ -105,7 +110,11 @@ class LoggingContext(object): @classmethod def current_context(cls): - """Get the current logging context from thread local storage""" + """Get the current logging context from thread local storage + + Returns: + LoggingContext: the current logging context + """ return getattr(cls.thread_local, "current_context", cls.sentinel) @classmethod @@ -155,11 +164,13 @@ class LoggingContext(object): self.alive = False def copy_to(self, record): - """Copy fields from this context to the record""" - for key, value in self.__dict__.items(): - setattr(record, key, value) + """Copy logging fields from this context to a log record or + another LoggingContext + """ - record.ru_utime, record.ru_stime = self.get_resource_usage() + # 'request' is the only field we currently use in the logger, so that's + # all we need to copy + record.request = self.request def start(self): if threading.current_thread() is not self.main_thread: |