Skip to content

Commit 7e4648b

Browse files
authored
Allow setting logfire.msg in structlog integration (#1113)
1 parent 3dc091f commit 7e4648b

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

logfire/integrations/structlog.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ def __call__(self, logger: WrappedLogger, name: str, event_dict: EventDict) -> E
3939
attributes = {k: v for k, v in event_dict.items() if k not in RESERVED_ATTRS}
4040
level = event_dict.get('level', 'info').lower()
4141
# NOTE: An event can be `None` in structlog. We may want to create a default msg in those cases.
42-
attributes[ATTRIBUTES_MESSAGE_KEY] = message = event_dict.get('event') or 'structlog event'
42+
msg_template = event_dict.get('event') or 'structlog event'
43+
attributes.setdefault(ATTRIBUTES_MESSAGE_KEY, msg_template)
4344
self.logfire_instance.log(
4445
level=level, # type: ignore
45-
msg_template=message,
46+
msg_template=msg_template,
4647
attributes=attributes,
4748
console_log=self.console_log,
4849
exc_info=event_dict.get('exc_info', False),

tests/test_structlog.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
from logging import Logger
2-
from typing import Any
3-
41
import pytest
52
import structlog
63
from inline_snapshot import snapshot
@@ -25,18 +22,18 @@ def fixture_configure_structlog() -> None:
2522

2623

2724
@pytest.fixture(scope='module')
28-
def logger() -> Any:
25+
def logger() -> structlog.BoundLogger:
2926
return structlog.get_logger()
3027

3128

32-
def test_structlog(exporter: TestExporter, logger: Logger) -> None:
29+
def test_structlog(exporter: TestExporter, logger: structlog.BoundLogger) -> None:
3330
logger.info('This is now being logged: %s', 123)
3431
logger.error(456)
3532

3633
try:
3734
str(1 / 0)
3835
except ZeroDivisionError:
39-
logger.exception('error')
36+
logger.exception('error', **{'logfire.msg': 'bad'})
4037

4138
assert exporter.exported_spans_as_dict(fixed_line_number=None) == snapshot(
4239
[
@@ -53,7 +50,7 @@ def test_structlog(exporter: TestExporter, logger: Logger) -> None:
5350
'logfire.msg': 'This is now being logged: 123',
5451
'code.filepath': 'test_structlog.py',
5552
'code.function': 'test_structlog',
56-
'code.lineno': 33,
53+
'code.lineno': 30,
5754
'logfire.disable_console_log': True,
5855
},
5956
},
@@ -70,7 +67,7 @@ def test_structlog(exporter: TestExporter, logger: Logger) -> None:
7067
'logfire.msg': '456',
7168
'code.filepath': 'test_structlog.py',
7269
'code.function': 'test_structlog',
73-
'code.lineno': 34,
70+
'code.lineno': 31,
7471
'logfire.disable_console_log': True,
7572
},
7673
},
@@ -84,10 +81,10 @@ def test_structlog(exporter: TestExporter, logger: Logger) -> None:
8481
'logfire.span_type': 'log',
8582
'logfire.level_num': 17,
8683
'logfire.msg_template': 'error',
87-
'logfire.msg': 'error',
84+
'logfire.msg': 'bad',
8885
'code.filepath': 'test_structlog.py',
8986
'code.function': 'test_structlog',
90-
'code.lineno': 39,
87+
'code.lineno': 36,
9188
'logfire.disable_console_log': True,
9289
},
9390
'events': [

0 commit comments

Comments
 (0)