@@ -30,9 +30,8 @@ class LogLevel(Enum):
30
30
@pytest .fixture
31
31
def logger (stdout , log_level ):
32
32
def _logger ():
33
- logging .basicConfig (stream = stdout , level = log_level .NOTSET .value )
34
- logger = logging .getLogger (name = service_name ())
35
- return logger
33
+ logging .basicConfig (stream = stdout , level = log_level .INFO .value )
34
+ return logging .getLogger (name = service_name ())
36
35
37
36
return _logger
38
37
@@ -51,142 +50,134 @@ def service_name():
51
50
52
51
53
52
def test_copy_config_to_ext_loggers (stdout , logger , log_level ):
54
-
55
- msg = "test message"
56
-
57
- # GIVEN a external logger and powertools logger initialized
53
+ # GIVEN two external loggers and powertools logger initialized
58
54
logger_1 = logger ()
59
55
logger_2 = logger ()
60
56
61
57
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
62
58
63
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
59
+ # WHEN configuration copied from powertools logger to ALL external loggers
60
+ # AND external loggers used
64
61
utils .copy_config_to_registered_loggers (source_logger = powertools_logger )
62
+ msg = "test message1"
65
63
logger_1 .info (msg )
66
64
logger_2 .info (msg )
67
65
logs = capture_multiple_logging_statements_output (stdout )
68
66
69
- # THEN
67
+ # THEN all external loggers used Powertools handler, formatter and log level
70
68
for index , logger in enumerate ([logger_1 , logger_2 ]):
71
69
assert len (logger .handlers ) == 1
72
- assert type (logger .handlers [0 ]) is logging .StreamHandler
73
- assert type (logger .handlers [0 ].formatter ) is formatter .LambdaPowertoolsFormatter
70
+ assert isinstance (logger .handlers [0 ], logging .StreamHandler )
71
+ assert isinstance (logger .handlers [0 ].formatter , formatter .LambdaPowertoolsFormatter )
74
72
assert logger .level == log_level .INFO .value
75
73
assert logs [index ]["message" ] == msg
76
74
assert logs [index ]["level" ] == log_level .INFO .name
77
75
78
76
79
77
def test_copy_config_to_ext_loggers_include (stdout , logger , log_level ):
80
-
81
- msg = "test message"
82
-
83
- # GIVEN a external logger and powertools logger initialized
78
+ # GIVEN an external logger and powertools logger initialized
84
79
logger = logger ()
85
80
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
86
81
87
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
82
+ # WHEN configuration copied from powertools logger to INCLUDED external loggers
83
+ # AND our external logger used
88
84
utils .copy_config_to_registered_loggers (source_logger = powertools_logger , include = {logger .name })
85
+ msg = "test message2"
89
86
logger .info (msg )
90
87
log = capture_logging_output (stdout )
91
88
92
- # THEN
89
+ # THEN included external loggers used Powertools handler, formatter and log level.
93
90
assert len (logger .handlers ) == 1
94
- assert type (logger .handlers [0 ]) is logging .StreamHandler
95
- assert type (logger .handlers [0 ].formatter ) is formatter .LambdaPowertoolsFormatter
91
+ assert isinstance (logger .handlers [0 ], logging .StreamHandler )
92
+ assert isinstance (logger .handlers [0 ].formatter , formatter .LambdaPowertoolsFormatter )
96
93
assert logger .level == log_level .INFO .value
97
94
assert log ["message" ] == msg
98
95
assert log ["level" ] == log_level .INFO .name
99
96
100
97
101
98
def test_copy_config_to_ext_loggers_wrong_include (stdout , logger , log_level ):
102
-
103
- # GIVEN a external logger and powertools logger initialized
99
+ # GIVEN an external logger and powertools logger initialized
104
100
logger = logger ()
105
101
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
106
102
107
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
103
+ # WHEN configuration copied from powertools logger to INCLUDED NON EXISTING external loggers
108
104
utils .copy_config_to_registered_loggers (source_logger = powertools_logger , include = {"non-existing-logger" })
109
105
110
- # THEN
106
+ # THEN existing external logger is not modified
111
107
assert not logger .handlers
112
108
113
109
114
110
def test_copy_config_to_ext_loggers_exclude (stdout , logger , log_level ):
115
-
116
- # GIVEN a external logger and powertools logger initialized
111
+ # GIVEN an external logger and powertools logger initialized
117
112
logger = logger ()
118
113
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
119
114
120
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
115
+ # WHEN configuration copied from powertools logger to ALL BUT external logger
121
116
utils .copy_config_to_registered_loggers (source_logger = powertools_logger , exclude = {logger .name })
122
117
123
- # THEN
118
+ # THEN external logger is not modified
124
119
assert not logger .handlers
125
120
126
121
127
122
def test_copy_config_to_ext_loggers_include_exclude (stdout , logger , log_level ):
128
-
129
- msg = "test message"
130
-
131
- # GIVEN a external logger and powertools logger initialized
123
+ # GIVEN two external loggers and powertools logger initialized
132
124
logger_1 = logger ()
133
125
logger_2 = logger ()
134
126
135
127
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
136
128
137
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
129
+ # WHEN configuration copied from powertools logger to INCLUDED external loggers
130
+ # AND external logger_1 is also in EXCLUDE list
138
131
utils .copy_config_to_registered_loggers (
139
132
source_logger = powertools_logger , include = {logger_1 .name , logger_2 .name }, exclude = {logger_1 .name }
140
133
)
134
+ msg = "test message3"
141
135
logger_2 .info (msg )
142
136
log = capture_logging_output (stdout )
143
137
144
- # THEN
138
+ # THEN logger_1 is not modified and Logger_2 used Powertools handler, formatter and log level
145
139
assert not logger_1 .handlers
146
140
assert len (logger_2 .handlers ) == 1
147
- assert type (logger_2 .handlers [0 ]) is logging .StreamHandler
148
- assert type (logger_2 .handlers [0 ].formatter ) is formatter .LambdaPowertoolsFormatter
141
+ assert isinstance (logger_2 .handlers [0 ], logging .StreamHandler )
142
+ assert isinstance (logger_2 .handlers [0 ].formatter , formatter .LambdaPowertoolsFormatter )
149
143
assert logger_2 .level == log_level .INFO .value
150
144
assert log ["message" ] == msg
151
145
assert log ["level" ] == log_level .INFO .name
152
146
153
147
154
148
def test_copy_config_to_ext_loggers_clean_old_handlers (stdout , logger , log_level ):
155
-
156
- # GIVEN a external logger with handler and powertools logger initialized
149
+ # GIVEN an external logger with handler and powertools logger initialized
157
150
logger = logger ()
158
- handler = logging .FileHandler ( "logfile" )
151
+ handler = logging .NullHandler ( )
159
152
logger .addHandler (handler )
160
153
powertools_logger = Logger (service = service_name (), level = log_level .INFO .value , stream = stdout )
161
154
162
- # WHEN configuration copied from powertools logger to ALL external loggers AND our external logger used
155
+ # WHEN configuration copied from powertools logger to ALL external loggers
163
156
utils .copy_config_to_registered_loggers (source_logger = powertools_logger )
164
157
165
- # THEN
158
+ # THEN old logger's handler removed and Powertools configuration used instead
166
159
assert len (logger .handlers ) == 1
167
- assert type (logger .handlers [0 ]) is logging .StreamHandler
168
- assert type (logger .handlers [0 ].formatter ) is formatter .LambdaPowertoolsFormatter
160
+ assert isinstance (logger .handlers [0 ], logging .StreamHandler )
161
+ assert isinstance (logger .handlers [0 ].formatter , formatter .LambdaPowertoolsFormatter )
169
162
170
163
171
164
def test_copy_config_to_ext_loggers_custom_log_level (stdout , logger , log_level ):
172
-
173
- msg = "test message"
174
-
175
- # GIVEN a external logger and powertools logger initialized
165
+ # GIVEN an external logger and powertools logger initialized
176
166
logger = logger ()
177
167
powertools_logger = Logger (service = service_name (), level = log_level .CRITICAL .value , stream = stdout )
178
168
level = log_level .WARNING .name
179
169
180
- # WHEN configuration copied from powertools logger to ALL external loggers
181
- # AND our external logger used with custom log_level
170
+ # WHEN configuration copied from powertools logger to INCLUDED external logger
171
+ # AND external logger used with custom log_level
182
172
utils .copy_config_to_registered_loggers (source_logger = powertools_logger , include = {logger .name }, log_level = level )
173
+ msg = "test message4"
183
174
logger .warning (msg )
184
175
log = capture_logging_output (stdout )
185
176
186
- # THEN
177
+ # THEN external logger used Powertools handler, formatter and CUSTOM log level.
187
178
assert len (logger .handlers ) == 1
188
- assert type (logger .handlers [0 ]) is logging .StreamHandler
189
- assert type (logger .handlers [0 ].formatter ) is formatter .LambdaPowertoolsFormatter
179
+ assert isinstance (logger .handlers [0 ], logging .StreamHandler )
180
+ assert isinstance (logger .handlers [0 ].formatter , formatter .LambdaPowertoolsFormatter )
190
181
assert powertools_logger .level == log_level .CRITICAL .value
191
182
assert logger .level == log_level .WARNING .value
192
183
assert log ["message" ] == msg
0 commit comments