Skip to content

Commit c8cf4e2

Browse files
committed
Add function for custom format + tests
1 parent 50e8e4e commit c8cf4e2

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

friendlylog/colored_logger.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,18 @@ def format(self, record):
5050
return super(_ColoredFormatter, self).format(record)
5151

5252

53+
def set_fmt(fmt_string):
54+
assert isinstance(fmt_string, str), "fmt_string must be string"
55+
56+
global inner_formatter
57+
58+
formatter = _ColoredFormatter(
59+
fmt=fmt_string
60+
)
61+
inner_stream_handler.setFormatter(formatter)
62+
inner_formatter = formatter
63+
64+
5365
_logger = logging.getLogger("friendlylog.ColoredLogger" + "-" + __name__)
5466
do_not_propagate(_logger)
5567

friendlylog/simple_logger.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,18 @@ def format(self, record):
3232
return super(_SimpleFormatter, self).format(record)
3333

3434

35+
def set_fmt(fmt_string):
36+
assert isinstance(fmt_string, str), "fmt_string must be string"
37+
38+
global inner_formatter
39+
40+
formatter = _SimpleFormatter(
41+
fmt=fmt_string
42+
)
43+
inner_stream_handler.setFormatter(formatter)
44+
inner_formatter = formatter
45+
46+
3547
_logger = logging.getLogger("friendlyLog.SimpleLogger" + "-" + __name__)
3648
do_not_propagate(_logger)
3749

@@ -45,6 +57,7 @@ def format(self, record):
4557
_logger.setLevel(logging.DEBUG)
4658

4759

60+
4861
# Export functions and objects.
4962
inner_logger = _logger # Don't use this except if you know what you are doing.
5063
inner_stream_handler = _stream_handler # Same thing for this object.

tests/test_colored_logger.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
class TestColoredLogger(unittest.TestCase):
1414

1515
def setUp(self):
16+
self.saved_inner_formatter = logger.inner_formatter
17+
1618
# Remove handler that outputs to STDERR.
1719
logger.inner_logger.removeHandler(logger.inner_stream_handler)
1820

@@ -23,11 +25,12 @@ def setUp(self):
2325
self.log_capture = io.StringIO()
2426
handler = logging.StreamHandler(self.log_capture)
2527
handler.setFormatter(logger.inner_formatter)
28+
logger.inner_stream_handler = handler
2629
logger.inner_logger.addHandler(handler)
2730
logger.setLevel(logging.DEBUG)
2831

2932
def tearDown(self):
30-
pass
33+
logger.inner_formatter = self.saved_inner_formatter
3134

3235
def last_line(self):
3336
log = self.log_capture.getvalue().splitlines()
@@ -210,6 +213,20 @@ def test_non_str_logging(self):
210213
logger.critical({})
211214
logger.warning(set([-1, 4]))
212215

216+
def test_set_custom_fmt(self):
217+
dbg_lvls = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
218+
fmt_string = "[%(funcName)s] %(message)s"
219+
logger.set_fmt(fmt_string)
220+
221+
for level in dbg_lvls:
222+
getattr(logger, level.lower())("Hello")
223+
224+
last_n = self.last_n_lines(len(dbg_lvls))
225+
for level, log in zip(dbg_lvls, last_n):
226+
self.assertRegex(
227+
log,
228+
r"\[test_set_custom_fmt\] .*{0}: Hello.*".format(level))
229+
213230

214231
if __name__ == '__main__':
215232
unittest.main()

tests/test_simple_logger.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
import unittest
77

88
from friendlylog import simple_logger as logger
9+
910
from threading import Thread
1011

1112

1213
# Tests cannot be executed in parallel due to the hack in the setUp method.
1314
class TestSimpleLogger(unittest.TestCase):
1415

1516
def setUp(self):
17+
self.saved_inner_formatter = logger.inner_formatter
18+
1619
# Remove handler that outputs to STDERR.
1720
logger.inner_logger.removeHandler(logger.inner_stream_handler)
1821

@@ -24,10 +27,11 @@ def setUp(self):
2427
handler = logging.StreamHandler(self.log_capture)
2528
handler.setFormatter(logger.inner_formatter)
2629
logger.inner_logger.addHandler(handler)
30+
logger.inner_stream_handler = handler
2731
logger.setLevel(logging.DEBUG)
2832

2933
def tearDown(self):
30-
pass
34+
logger.inner_formatter = self.saved_inner_formatter
3135

3236
def last_line(self):
3337
log = self.log_capture.getvalue().splitlines()
@@ -204,6 +208,20 @@ def test_non_str_logging(self):
204208
logger.critical({})
205209
logger.warning(set([-1, 4, 10, -100]))
206210

211+
def test_set_custom_fmt(self):
212+
dbg_lvls = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
213+
fmt_string = "[%(funcName)s] %(message)s"
214+
logger.set_fmt(fmt_string)
215+
216+
for level in dbg_lvls:
217+
getattr(logger, level.lower())("Hello")
218+
219+
last_n = self.last_n_lines(len(dbg_lvls))
220+
for level, log in zip(dbg_lvls, last_n):
221+
self.assertEqual(
222+
"[test_set_custom_fmt] {0}: Hello".format(level),
223+
log)
224+
207225

208226
if __name__ == '__main__':
209227
unittest.main()

0 commit comments

Comments
 (0)