Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions friendlylog/colored_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ def format(self, record):
return super(_ColoredFormatter, self).format(record)


def set_fmt(fmt_string):
assert isinstance(fmt_string, str), "fmt_string must be string"

global inner_formatter

formatter = _ColoredFormatter(
fmt=fmt_string
)
inner_stream_handler.setFormatter(formatter)
inner_formatter = formatter


_logger = logging.getLogger("friendlylog.ColoredLogger" + "-" + __name__)
do_not_propagate(_logger)

Expand Down
12 changes: 12 additions & 0 deletions friendlylog/simple_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,18 @@ def format(self, record):
return super(_SimpleFormatter, self).format(record)


def set_fmt(fmt_string):
assert isinstance(fmt_string, str), "fmt_string must be string"

global inner_formatter

formatter = _SimpleFormatter(
fmt=fmt_string
)
inner_stream_handler.setFormatter(formatter)
inner_formatter = formatter


_logger = logging.getLogger("friendlyLog.SimpleLogger" + "-" + __name__)
do_not_propagate(_logger)

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ codecov
coverage
pytest
pytest-cov
unittest2; python_version <= "2.7"
5 changes: 5 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
'colored>=1.4.0',
'six>=1.12.0',
],
extras_require={
':python_version == "2.7"': [
'unittest2',
],
},
classifiers=[
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 2",
Expand Down
24 changes: 23 additions & 1 deletion tests/test_colored_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,18 @@
from friendlylog import colored_logger as logger
from threading import Thread

if six.PY2:
import unittest2 as unittest
else:
import unittest


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

def setUp(self):
self.saved_inner_formatter = logger.inner_formatter

# Remove handler that outputs to STDERR.
logger.inner_logger.removeHandler(logger.inner_stream_handler)

Expand All @@ -23,11 +30,12 @@ def setUp(self):
self.log_capture = io.StringIO()
handler = logging.StreamHandler(self.log_capture)
handler.setFormatter(logger.inner_formatter)
logger.inner_stream_handler = handler
logger.inner_logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

def tearDown(self):
pass
logger.inner_formatter = self.saved_inner_formatter

def last_line(self):
log = self.log_capture.getvalue().splitlines()
Expand Down Expand Up @@ -210,6 +218,20 @@ def test_non_str_logging(self):
logger.critical({})
logger.warning(set([-1, 4]))

def test_set_custom_fmt(self):
dbg_lvls = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
fmt_string = "[%(funcName)s] %(message)s"
logger.set_fmt(fmt_string)

for level in dbg_lvls:
getattr(logger, level.lower())("Hello")

last_n = self.last_n_lines(len(dbg_lvls))
for level, log in zip(dbg_lvls, last_n):
self.assertRegex(
log,
r"\[test_set_custom_fmt\] .*{0}: Hello.*".format(level))


if __name__ == '__main__':
unittest.main()
25 changes: 23 additions & 2 deletions tests/test_simple_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@
import random
import six
import string
import unittest

from friendlylog import simple_logger as logger
from threading import Thread

if six.PY2:
import unittest2 as unittest
else:
import unittest


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

def setUp(self):
self.saved_inner_formatter = logger.inner_formatter

# Remove handler that outputs to STDERR.
logger.inner_logger.removeHandler(logger.inner_stream_handler)

Expand All @@ -24,10 +30,11 @@ def setUp(self):
handler = logging.StreamHandler(self.log_capture)
handler.setFormatter(logger.inner_formatter)
logger.inner_logger.addHandler(handler)
logger.inner_stream_handler = handler
logger.setLevel(logging.DEBUG)

def tearDown(self):
pass
logger.inner_formatter = self.saved_inner_formatter

def last_line(self):
log = self.log_capture.getvalue().splitlines()
Expand Down Expand Up @@ -204,6 +211,20 @@ def test_non_str_logging(self):
logger.critical({})
logger.warning(set([-1, 4, 10, -100]))

def test_set_custom_fmt(self):
dbg_lvls = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
fmt_string = "[%(funcName)s] %(message)s"
logger.set_fmt(fmt_string)

for level in dbg_lvls:
getattr(logger, level.lower())("Hello")

last_n = self.last_n_lines(len(dbg_lvls))
for level, log in zip(dbg_lvls, last_n):
self.assertEqual(
"[test_set_custom_fmt] {0}: Hello".format(level),
log)


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