-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest_log_helper.py
More file actions
71 lines (60 loc) · 2.93 KB
/
test_log_helper.py
File metadata and controls
71 lines (60 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import json
import logging
import os
import time
from freezegun import freeze_time
from nypl_py_utils.functions.log_helper import create_log
@freeze_time('2023-01-01 19:00:00')
class TestLogHelper:
def test_json_logging(self, capsys):
logger = create_log('test_log', json=True)
logger.info('test', some="json")
output = json.loads(capsys.readouterr().out)
assert output.get("message") == 'test'
assert output.get("some") == 'json'
assert output.get('level') == 'info'
assert output.get('timestamp') == '2023-01-01T19:00:00Z'
def test_default_logging(self, caplog):
logger = create_log('test_log')
assert logger.getEffectiveLevel() == logging.INFO
assert len(logger.handlers) == 1
logger.info('Test info message')
# freeze_time changes the utc time, while the logger uses local time by
# default, so force the logger to use utc time
logger.handlers[0].formatter.converter = time.gmtime
assert len(caplog.records) == 1
assert logger.handlers[0].format(caplog.records[0]) == \
'2023-01-01 19:00:00,000 | test_log | INFO: Test info message'
def test_logging_with_custom_log_level(self, caplog):
os.environ['LOG_LEVEL'] = 'error'
logger = create_log('test_log')
assert logger.getEffectiveLevel() == logging.ERROR
logger.info('Test info message')
logger.error('Test error message')
assert len(caplog.records) == 1
# freeze_time changes the utc time, while the logger uses local time by
# default, so force the logger to use utc time
logger.handlers[0].formatter.converter = time.gmtime
assert logger.handlers[0].format(caplog.records[0]) == \
'2023-01-01 19:00:00,000 | test_log | ERROR: Test error message'
del os.environ['LOG_LEVEL']
def test_logging_no_duplicates(self, caplog):
logger = create_log('test_log')
logger.info('Test info message')
# Test that logger uses the most recently set log level and doesn't
# duplicate handlers/messages when create_log is called more than once.
os.environ['LOG_LEVEL'] = 'error'
logger = create_log('test_log')
assert logger.getEffectiveLevel() == logging.ERROR
assert len(logger.handlers) == 1
logger.info('Test info message 2')
logger.error('Test error message')
assert len(caplog.records) == 2
# freeze_time changes the utc time, while the logger uses local time by
# default, so force the logger to use utc time
logger.handlers[0].formatter.converter = time.gmtime
assert logger.handlers[0].format(caplog.records[0]) == \
'2023-01-01 19:00:00,000 | test_log | INFO: Test info message'
assert logger.handlers[0].format(caplog.records[1]) == \
'2023-01-01 19:00:00,000 | test_log | ERROR: Test error message'
del os.environ['LOG_LEVEL']