Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Always use the name as the log ID. #9829

Merged
merged 7 commits into from
Apr 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/9829.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix the log lines of nested logging contexts.
14 changes: 4 additions & 10 deletions synapse/logging/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ class LoggingContext:

def __init__(
self,
name: Optional[str] = None,
name: str,
parent_context: "Optional[LoggingContext]" = None,
request: Optional[ContextRequest] = None,
) -> None:
Expand Down Expand Up @@ -315,9 +315,7 @@ def __init__(
self.request = request

def __str__(self) -> str:
if self.request:
return self.request.request_id
return "%s@%x" % (self.name, id(self))
return self.name

@classmethod
def current_context(cls) -> LoggingContextOrSentinel:
Expand Down Expand Up @@ -694,17 +692,13 @@ def nested_logging_context(suffix: str) -> LoggingContext:
"Starting nested logging context from sentinel context: metrics will be lost"
)
parent_context = None
prefix = ""
request = None
else:
assert isinstance(curr_context, LoggingContext)
parent_context = curr_context
prefix = str(parent_context.name)
request = parent_context.request
prefix = str(curr_context)
return LoggingContext(
prefix + "-" + suffix,
parent_context=parent_context,
request=request,
)


Expand Down Expand Up @@ -895,7 +889,7 @@ def defer_to_threadpool(reactor, threadpool, f, *args, **kwargs):
parent_context = curr_context

def g():
with LoggingContext(parent_context=parent_context):
with LoggingContext(str(curr_context), parent_context=parent_context):
return f(*args, **kwargs)

return make_deferred_yieldable(threads.deferToThreadPool(reactor, threadpool, g))
15 changes: 4 additions & 11 deletions synapse/metrics/background_process_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import logging
import threading
from functools import wraps
from typing import TYPE_CHECKING, Dict, Optional, Set, Union
from typing import TYPE_CHECKING, Dict, Optional, Set

from prometheus_client.core import REGISTRY, Counter, Gauge

Expand Down Expand Up @@ -199,7 +199,7 @@ async def run():
_background_process_start_count.labels(desc).inc()
_background_process_in_flight_count.labels(desc).inc()

with BackgroundProcessLoggingContext(desc, count) as context:
with BackgroundProcessLoggingContext("%s-%s" % (desc, count)) as context:
try:
ctx = noop_context_manager()
if bg_start_span:
Expand Down Expand Up @@ -242,19 +242,12 @@ class BackgroundProcessLoggingContext(LoggingContext):
processes.
"""

__slots__ = ["_id", "_proc"]
__slots__ = ["_proc"]

def __init__(self, name: str, id: Optional[Union[int, str]] = None):
def __init__(self, name: str):
super().__init__(name)
self._id = id

self._proc = _BackgroundProcess(name, self)

def __str__(self) -> str:
if self._id is not None:
return "%s-%s" % (self.name, self._id)
return "%s@%x" % (self.name, id(self))

def start(self, rusage: "Optional[resource._RUsage]"):
"""Log context has started running (again)."""

Expand Down
2 changes: 1 addition & 1 deletion synapse/replication/tcp/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def __init__(self, clock: Clock, handler: "ReplicationCommandHandler"):
# a logcontext which we use for processing incoming commands. We declare it as a
# background process so that the CPU stats get reported to prometheus.
self._logging_context = BackgroundProcessLoggingContext(
"replication-conn", self.conn_id
"replication-conn-%s" % (self.conn_id,)
)

def connectionMade(self):
Expand Down
14 changes: 9 additions & 5 deletions synapse/util/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,13 @@ class Measure:
"start",
]

def __init__(self, clock, name):
def __init__(self, clock, name: str):
"""
Args:
clock: A n object with a "time()" method, which returns the current
time in seconds.
name: The name of the metric to report.
"""
self.clock = clock
self.name = name
curr_context = current_context()
Expand All @@ -118,10 +124,8 @@ def __init__(self, clock, name):
else:
assert isinstance(curr_context, LoggingContext)
parent_context = curr_context
self._logging_context = LoggingContext(
"Measure[%s]" % (self.name,), parent_context
)
self.start = None
self._logging_context = LoggingContext(str(curr_context), parent_context)
self.start = None # type: Optional[int]

def __enter__(self) -> "Measure":
if self.start is not None:
Expand Down
6 changes: 4 additions & 2 deletions tests/logging/test_terse_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def test_with_context(self):
]
self.assertCountEqual(log.keys(), expected_log_keys)
self.assertEqual(log["log"], "Hello there, wally!")
self.assertTrue(log["request"].startswith("name@"))
self.assertEqual(log["request"], "name")

def test_with_request_context(self):
"""
Expand All @@ -165,7 +165,9 @@ def test_with_request_context(self):
# Also set the requester to ensure the processing works.
request.requester = "@foo:test"

with LoggingContext(parent_context=request.logcontext):
with LoggingContext(
request.get_request_id(), parent_context=request.logcontext
):
logger.info("Hello there, %s!", "wally")

log = self.get_log_line()
Expand Down
2 changes: 1 addition & 1 deletion tests/test_federation.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ async def post_json(destination, path, data, headers=None, timeout=0):
}
)

with LoggingContext():
with LoggingContext("test-context"):
failure = self.get_failure(
self.handler.on_receive_pdu(
"test.serv", lying_event, sent_to_us_directly=True
Expand Down
6 changes: 2 additions & 4 deletions tests/util/caches/test_descriptors.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,7 @@ def inner_fn():

@defer.inlineCallbacks
def do_lookup():
with LoggingContext() as c1:
c1.name = "c1"
with LoggingContext("c1") as c1:
r = yield obj.fn(1)
self.assertEqual(current_context(), c1)
return r
Expand Down Expand Up @@ -274,8 +273,7 @@ def inner_fn():

@defer.inlineCallbacks
def do_lookup():
with LoggingContext() as c1:
c1.name = "c1"
with LoggingContext("c1") as c1:
try:
d = obj.fn(1)
self.assertEqual(
Expand Down