Skip to content

Commit c78e77f

Browse files
committed
✨ Add support for datetimes
1 parent fae5743 commit c78e77f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

jsonfilelogger/custom_encoder.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from typing import Any
2+
import datetime
3+
import json
4+
5+
6+
class CustomEncoder(json.JSONEncoder):
7+
def default(self, o: Any) -> Any:
8+
if isinstance(o, datetime.datetime):
9+
return str(o)
10+
else:
11+
return super().default(o)

jsonfilelogger/logger.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import json
33
import time
4+
from .custom_encoder import CustomEncoder
45

56

67
class LogBase:
@@ -113,7 +114,7 @@ def flush(self):
113114
# set ',' for previously added entry
114115
file.write(",\n")
115116
# write new entries
116-
file.write(",\n".join([json.dumps(el) for el in self.log_buffer]))
117+
file.write(",\n".join([json.dumps(el, cls=CustomEncoder) for el in self.log_buffer]))
117118
# always close file to have correct json syntax
118119
file.write("\n]\n")
119120

tests/test_logger.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
import os
23
import pytest
34
import glob
@@ -33,7 +34,24 @@ def test_writer_and_reader():
3334
reader.assert_file_exists()
3435

3536

36-
def test_writer_and_reader_with_datetime():
37+
def test_writer_and_reader_with_datetime_value():
38+
writer = LogWriter(threshold=1)
39+
writer.reset()
40+
writer.log({"datetime": datetime.datetime.fromisoformat("2021-11-17 18:23:22.483962")})
41+
assert os.path.exists("./log.json")
42+
reader = LogReader()
43+
data = reader.retrieve()
44+
assert len(data) == 1
45+
assert data == [{"datetime": "2021-11-17 18:23:22.483962"}]
46+
reader.reset()
47+
data = reader.retrieve()
48+
assert len(data) == 0
49+
reader.remove()
50+
with pytest.raises(Exception):
51+
reader.assert_file_exists()
52+
53+
54+
def test_writer_and_reader_with_datetime_filename():
3755
writer = LogWriter.with_datetime(threshold=2)
3856
writer.reset()
3957
writer.log({"test": 1, "this": "logger", "with": True, "all": 1.337, "kinds": ["of", "values"]})

0 commit comments

Comments
 (0)