Skip to content

Commit 2f60c62

Browse files
authored
Logging instrumentation safeties; Update tests. (#130)
* Assure string in format * Update tests to include/test new log spans.
1 parent 6a502a6 commit 2f60c62

File tree

5 files changed

+58
-22
lines changed

5 files changed

+58
-22
lines changed

instana/instrumentation/logging.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from ..log import logger
88
from ..singletons import tracer
99

10+
1011
@wrapt.patch_function_wrapper('logging', 'Logger._log')
1112
def log_with_instana(wrapped, instance, argv, kwargs):
1213
# argv[0] = level
@@ -18,7 +19,9 @@ def log_with_instana(wrapped, instance, argv, kwargs):
1819
# Only needed if we're tracing and serious log
1920
if parent_span and argv[0] >= logging.WARN:
2021
# get the formatted log message
21-
msg = argv[1] % argv[2]
22+
# clients such as suds-jurko log things such as: Fault(Server: 'Server side fault example.')
23+
# So make sure we're working with a string
24+
msg = str(argv[1]) % argv[2]
2225

2326
# get additional information if an exception is being handled
2427
parameters = None
@@ -41,5 +44,6 @@ def log_with_instana(wrapped, instance, argv, kwargs):
4144
finally:
4245
return wrapped(*argv, **kwargs)
4346

47+
4448
logger.debug('Instrumenting logging')
4549

tests/test_django.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,12 @@ def test_request_with_error(self):
7979
assert_equals(500, response.status)
8080

8181
spans = self.recorder.queued_spans()
82-
assert_equals(3, len(spans))
82+
assert_equals(4, len(spans))
8383

84-
test_span = spans[2]
85-
urllib3_span = spans[1]
86-
django_span = spans[0]
84+
test_span = spans[3]
85+
urllib3_span = spans[2]
86+
django_span = spans[1]
87+
log_span = spans[0]
8788

8889
assert ('X-Instana-T' in response.headers)
8990
assert (int(response.headers['X-Instana-T'], 16))
@@ -103,12 +104,15 @@ def test_request_with_error(self):
103104
assert_equals("test", test_span.data.sdk.name)
104105
assert_equals("urllib3", urllib3_span.n)
105106
assert_equals("django", django_span.n)
107+
assert_equals("log", log_span.n)
106108

107109
assert_equals(test_span.t, urllib3_span.t)
108110
assert_equals(urllib3_span.t, django_span.t)
111+
assert_equals(django_span.t, log_span.t)
109112

110113
assert_equals(urllib3_span.p, test_span.s)
111114
assert_equals(django_span.p, urllib3_span.s)
115+
assert_equals(log_span.p, django_span.s)
112116

113117
assert_equals(True, django_span.error)
114118
assert_equals(1, django_span.ec)

tests/test_logging.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,24 @@ def test_no_span(self):
2626

2727
def test_extra_span(self):
2828
with tracer.start_active_span('test'):
29-
self.logger.warn('foo %s', 'bar')
29+
self.logger.warning('foo %s', 'bar')
3030

3131
spans = self.recorder.queued_spans()
3232
self.assertEqual(2, len(spans))
3333
self.assertEqual(3, spans[0].k) # intermediate kind
3434

3535
self.assertEqual('foo bar', spans[0].data.log.get('message'))
3636

37+
def test_log_with_tuple(self):
38+
with tracer.start_active_span('test'):
39+
self.logger.warning('foo %s', ("bar",))
40+
41+
spans = self.recorder.queued_spans()
42+
self.assertEqual(2, len(spans))
43+
self.assertEqual(3, spans[0].k) # intermediate kind
44+
45+
self.assertEqual("foo ('bar',)", spans[0].data.log.get('message'))
46+
3747
def test_parameters(self):
3848
with tracer.start_active_span('test'):
3949
try:

tests/test_sudsjurko.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,13 @@ def test_server_exception(self):
6464
pass
6565

6666
spans = self.recorder.queued_spans()
67-
assert_equals(3, len(spans))
68-
wsgi_span = spans[0]
69-
soap_span = spans[1]
70-
test_span = spans[2]
67+
assert_equals(5, len(spans))
68+
69+
log_span1 = spans[0]
70+
wsgi_span = spans[1]
71+
log_span2 = spans[2]
72+
soap_span = spans[3]
73+
test_span = spans[4]
7174

7275
assert_equals(None, response)
7376
assert_equals("test", test_span.data.sdk.name)
@@ -98,10 +101,12 @@ def test_server_fault(self):
98101
pass
99102

100103
spans = self.recorder.queued_spans()
101-
assert_equals(3, len(spans))
102-
wsgi_span = spans[0]
103-
soap_span = spans[1]
104-
test_span = spans[2]
104+
assert_equals(5, len(spans))
105+
log_span1 = spans[0]
106+
wsgi_span = spans[1]
107+
log_span2 = spans[2]
108+
soap_span = spans[3]
109+
test_span = spans[4]
105110

106111
assert_equals(None, response)
107112
assert_equals("test", test_span.data.sdk.name)
@@ -132,10 +137,13 @@ def test_client_fault(self):
132137
pass
133138

134139
spans = self.recorder.queued_spans()
135-
assert_equals(3, len(spans))
136-
wsgi_span = spans[0]
137-
soap_span = spans[1]
138-
test_span = spans[2]
140+
assert_equals(5, len(spans))
141+
142+
log_span1 = spans[0]
143+
wsgi_span = spans[1]
144+
log_span2 = spans[2]
145+
soap_span = spans[3]
146+
test_span = spans[4]
139147

140148
assert_equals(None, response)
141149
assert_equals("test", test_span.data.sdk.name)

tests/test_urllib3.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -450,11 +450,12 @@ def test_exception_logging(self):
450450
pass
451451

452452
spans = self.recorder.queued_spans()
453-
self.assertEqual(3, len(spans))
453+
self.assertEqual(4, len(spans))
454454

455-
wsgi_span = spans[0]
456-
urllib3_span = spans[1]
457-
test_span = spans[2]
455+
log_span = spans[0]
456+
wsgi_span = spans[1]
457+
urllib3_span = spans[2]
458+
test_span = spans[3]
458459

459460
assert(r)
460461
self.assertEqual(500, r.status)
@@ -464,10 +465,12 @@ def test_exception_logging(self):
464465
traceId = test_span.t
465466
self.assertEqual(traceId, urllib3_span.t)
466467
self.assertEqual(traceId, wsgi_span.t)
468+
self.assertEqual(traceId, log_span.t)
467469

468470
# Parent relationships
469471
self.assertEqual(urllib3_span.p, test_span.s)
470472
self.assertEqual(wsgi_span.p, urllib3_span.s)
473+
self.assertEqual(log_span.p, wsgi_span.s)
471474

472475
# Error logging
473476
self.assertFalse(test_span.error)
@@ -477,6 +480,13 @@ def test_exception_logging(self):
477480
self.assertTrue(wsgi_span.error)
478481
self.assertEqual(1, wsgi_span.ec)
479482

483+
# log span
484+
self.assertEqual('log', log_span.n)
485+
self.assertEqual(3, log_span.k)
486+
self.assertTrue(type(log_span.stack) is list)
487+
self.assertTrue('log' in log_span.data.__dict__)
488+
self.assertTrue('message' in log_span.data.log)
489+
480490
# wsgi
481491
self.assertEqual("wsgi", wsgi_span.n)
482492
self.assertEqual('127.0.0.1:5000', wsgi_span.data.http.host)

0 commit comments

Comments
 (0)