mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-05 13:54:55 -04:00
Record more information into structured logs. (#9654)
Records additional request information into the structured logs, e.g. the requester, IP address, etc.
This commit is contained in:
parent
0d87c6bd12
commit
48d44ab142
10 changed files with 255 additions and 88 deletions
|
@ -12,15 +12,20 @@
|
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import json
|
||||
import logging
|
||||
from io import StringIO
|
||||
from io import BytesIO, StringIO
|
||||
|
||||
from mock import Mock, patch
|
||||
|
||||
from twisted.web.server import Request
|
||||
|
||||
from synapse.http.site import SynapseRequest
|
||||
from synapse.logging._terse_json import JsonFormatter, TerseJsonFormatter
|
||||
from synapse.logging.context import LoggingContext, LoggingContextFilter
|
||||
|
||||
from tests.logging import LoggerCleanupMixin
|
||||
from tests.server import FakeChannel
|
||||
from tests.unittest import TestCase
|
||||
|
||||
|
||||
|
@ -120,7 +125,7 @@ class TerseJsonTestCase(LoggerCleanupMixin, TestCase):
|
|||
handler.addFilter(LoggingContextFilter())
|
||||
logger = self.get_logger(handler)
|
||||
|
||||
with LoggingContext(request="test"):
|
||||
with LoggingContext("name"):
|
||||
logger.info("Hello there, %s!", "wally")
|
||||
|
||||
log = self.get_log_line()
|
||||
|
@ -134,4 +139,61 @@ class TerseJsonTestCase(LoggerCleanupMixin, TestCase):
|
|||
]
|
||||
self.assertCountEqual(log.keys(), expected_log_keys)
|
||||
self.assertEqual(log["log"], "Hello there, wally!")
|
||||
self.assertEqual(log["request"], "test")
|
||||
self.assertTrue(log["request"].startswith("name@"))
|
||||
|
||||
def test_with_request_context(self):
|
||||
"""
|
||||
Information from the logging context request should be added to the JSON response.
|
||||
"""
|
||||
handler = logging.StreamHandler(self.output)
|
||||
handler.setFormatter(JsonFormatter())
|
||||
handler.addFilter(LoggingContextFilter())
|
||||
logger = self.get_logger(handler)
|
||||
|
||||
# A full request isn't needed here.
|
||||
site = Mock(spec=["site_tag", "server_version_string", "getResourceFor"])
|
||||
site.site_tag = "test-site"
|
||||
site.server_version_string = "Server v1"
|
||||
request = SynapseRequest(FakeChannel(site, None))
|
||||
# Call requestReceived to finish instantiating the object.
|
||||
request.content = BytesIO()
|
||||
# Partially skip some of the internal processing of SynapseRequest.
|
||||
request._started_processing = Mock()
|
||||
request.request_metrics = Mock(spec=["name"])
|
||||
with patch.object(Request, "render"):
|
||||
request.requestReceived(b"POST", b"/_matrix/client/versions", b"1.1")
|
||||
|
||||
# Also set the requester to ensure the processing works.
|
||||
request.requester = "@foo:test"
|
||||
|
||||
with LoggingContext(parent_context=request.logcontext):
|
||||
logger.info("Hello there, %s!", "wally")
|
||||
|
||||
log = self.get_log_line()
|
||||
|
||||
# The terse logger includes additional request information, if possible.
|
||||
expected_log_keys = [
|
||||
"log",
|
||||
"level",
|
||||
"namespace",
|
||||
"request",
|
||||
"ip_address",
|
||||
"site_tag",
|
||||
"requester",
|
||||
"authenticated_entity",
|
||||
"method",
|
||||
"url",
|
||||
"protocol",
|
||||
"user_agent",
|
||||
]
|
||||
self.assertCountEqual(log.keys(), expected_log_keys)
|
||||
self.assertEqual(log["log"], "Hello there, wally!")
|
||||
self.assertTrue(log["request"].startswith("POST-"))
|
||||
self.assertEqual(log["ip_address"], "127.0.0.1")
|
||||
self.assertEqual(log["site_tag"], "test-site")
|
||||
self.assertEqual(log["requester"], "@foo:test")
|
||||
self.assertEqual(log["authenticated_entity"], "@foo:test")
|
||||
self.assertEqual(log["method"], "POST")
|
||||
self.assertEqual(log["url"], "/_matrix/client/versions")
|
||||
self.assertEqual(log["protocol"], "1.1")
|
||||
self.assertEqual(log["user_agent"], "")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue