def test_api_logfile(capsys): """ logzero.logfile(..) should work as expected """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logger.info("info1") # Set logfile logzero.logfile(temp.name) logzero.logger.info("info2") # Remove logfile logzero.logfile(None) logzero.logger.info("info3") # Set logfile again logzero.logfile(temp.name) logzero.logger.info("info4") with open(temp.name) as f: content = f.read() cases = { 'ins': {"] info2", "] info4"}, 'outs': {"] info1", "] info3"} } _check_strs_in(cases, content=content) finally: temp.close()
def test_api_loglevel_custom_handlers(capsys): """ Should reconfigure the internal logger loglevel and custom handlers """ logzero.reset_default_logger() # TODO pass
def test_json_encoding(capsys): """ see logzero.json(json_ensure_ascii=True) """ logzero.reset_default_logger() # UTF-8 mode logzero.json(json_ensure_ascii=False) logzero.logger.info('ß') out, err = capsys.readouterr() json.loads(err) # make sure JSON is valid assert 'ß' in err assert 'u00df' not in err # ASCII mode logzero.json(json_ensure_ascii=True) logzero.logger.info('ß') out, err = capsys.readouterr() json.loads(err) # make sure JSON is valid assert 'u00df' in err assert 'ß' not in err # Default JSON mode should be utf-8 logzero.json() logzero.logger.info('ß') out, err = capsys.readouterr() json.loads(err) # make sure JSON is valid assert 'ß' in err assert 'u00df' not in err
def test_api_rotating_logfile(capsys): """ logzero.rotating_logfile(..) should work as expected """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logger.info("info1") # Set logfile logzero.logfile(temp.name, maxBytes=10, backupCount=3) logzero.logger.info("info2") logzero.logger.info("info3") with open(temp.name) as f: content = f.read() assert "] info1" not in content # logged before setting up logfile assert "] info2" not in content # already rotated out assert "] info3" in content # already rotated out fn_rotated = temp.name + ".1" assert os.path.exists(fn_rotated) with open(fn_rotated) as f: content = f.read() assert "] info2" in content finally: temp.close()
def test_api_rotating_logfile(capsys): """ logzero.rotating_logfile(..) should work as expected """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logger.info("info1") # Set logfile logzero.logfile(temp.name, maxBytes=10, backupCount=3) logzero.logger.info("info2") logzero.logger.info("info3") with open(temp.name) as f: content = f.read() cases = {'ins': {"] info3"}, 'outs': {"] info1", "] info2"}} _check_strs_in(cases, content=content) fn_rotated = temp.name + ".1" assert os.path.exists(fn_rotated) with open(fn_rotated) as f: content = f.read() assert "] info2" in content finally: temp.close()
def test_unicode(): """ Should log unicode """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name) msg = "😄 😁 😆 😅 😂" logger.debug(msg) with open(temp.name, "rb") as f: content = f.read() right_ans_nt_compat = { ("\\xf0\\x9f\\x98\\x84 \\xf0\\x9f\\x98\\x81 \\xf0\\x9" "f\\x98\\x86 \\xf0\\x9f\\x98\\x85 \\xf0\\x9f\\x98\\x8" "2\\r\\n'"), ("\\xf0\\x9f\\x98\\x84 \\xf0\\x9f\\x98\\x81 \\xf0\\x9" "f\\x98\\x86 \\xf0\\x9f\\x98\\x85 \\xf0\\x9f\\x98\\x8" "2\\n'") # notice nt use \\r\\n for a new line } assert any(right_ans in repr(content) for right_ans in right_ans_nt_compat) finally: temp.close()
def test_api_logfile_custom_loglevel(): """ logzero.logfile(..) should be able to use a custom loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: # Set logfile with custom loglevel logzero.logfile(temp.name, loglevel=logging.WARNING) logzero.logger.info("info1") logzero.logger.warning("warning1") # If setting a loglevel with logzero.loglevel(..) it will not overwrite # the custom loglevel of the file handler logzero.loglevel(logging.INFO) logzero.logger.info("info2") logzero.logger.warning("warning2") with open(temp.name) as f: content = f.read() cases = { 'ins': {"] warning2", "] warning1"}, 'outs': {"] info2", "] info1"} } _check_strs_in(cases, content=content) finally: temp.close()
def test_api_logfile_custom_loglevel(): """ logzero.logfile(..) should be able to use a custom loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: # Set logfile with custom loglevel logzero.logfile(temp.name, loglevel=logzero.WARN) logzero.logger.info("info1") logzero.logger.warning("warn1") # If setting a loglevel with logzero.loglevel(..) it will not overwrite # the custom loglevel of the file handler logzero.loglevel(logzero.INFO) logzero.logger.info("info2") logzero.logger.warning("warn2") with open(temp.name) as f: content = f.read() assert "] info1" not in content assert "] warn1" in content assert "] info2" not in content assert "] warn2" in content finally: temp.close()
def test_api_logfile(capsys): """ logzero.logfile(..) should work as expected """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logger.info("info1") # Set logfile logzero.logfile(temp.name) logzero.logger.info("info2") # Remove logfile logzero.logfile(None) logzero.logger.info("info3") # Set logfile again logzero.logfile(temp.name) logzero.logger.info("info4") with open(temp.name) as f: content = f.read() assert "] info1" not in content assert "] info2" in content assert "] info3" not in content assert "] info4" in content finally: temp.close()
def test_default_logger(disableStdErrorLogger=False): """ Default logger should work and be able to be reconfigured. """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.setup_default_logger(logfile=temp.name, disableStderrLogger=disableStdErrorLogger) logzero.logger.debug("debug1") # will be logged # Reconfigure with loglevel INFO logzero.setup_default_logger(logfile=temp.name, level=logging.INFO, disableStderrLogger=disableStdErrorLogger) logzero.logger.debug("debug2") # will not be logged logzero.logger.info("info1") # will be logged # Reconfigure with a different formatter log_format = '%(color)s[xxx]%(end_color)s %(message)s' formatter = logzero.LogFormatter(fmt=log_format) logzero.setup_default_logger(logfile=temp.name, level=logging.INFO, formatter=formatter, disableStderrLogger=disableStdErrorLogger) logzero.logger.info("info2") # will be logged with new formatter logzero.logger.debug("debug3") # will not be logged with open(temp.name) as f: content = f.read() _test_default_logger_output(content) finally: temp.close()
def test_setup_logger_reconfiguration(): """ Should be able to reconfigure without loosing custom handlers """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() temp2 = tempfile.NamedTemporaryFile() try: logzero.setup_default_logger(logfile=temp.name) # Add a custom file handler filehandler = logging.FileHandler(temp2.name) filehandler.setLevel(logging.DEBUG) filehandler.setFormatter(logzero.LogFormatter(color=False)) logzero.logger.addHandler(filehandler) # First debug message goes to both files logzero.logger.debug("debug1") # Reconfigure logger to remove logfile logzero.setup_default_logger() logzero.logger.debug("debug2") # Reconfigure logger to add logfile logzero.setup_default_logger(logfile=temp.name) logzero.logger.debug("debug3") # Reconfigure logger to set minimum loglevel to INFO logzero.setup_default_logger(logfile=temp.name, level=logging.INFO) logzero.logger.debug("debug4") logzero.logger.info("info1") # Reconfigure logger to set minimum loglevel back to DEBUG logzero.setup_default_logger(logfile=temp.name, level=logging.DEBUG) logzero.logger.debug("debug5") with open(temp.name) as f: content = f.read() assert "] debug1" in content assert "] debug2" not in content assert "] debug3" in content assert "] debug4" not in content assert "] info1" in content assert "] debug5" in content with open(temp2.name) as f: content = f.read() assert "] debug1" in content assert "] debug2" in content assert "] debug3" in content assert "] debug4" not in content assert "] info1" in content assert "] debug5" in content finally: temp.close()
def test_default_logger_syslog_only(capsys): """ Run a test logging to ``syslog`` and confirm that no data is written to stderr. Note that the output in syslog is not currently being captured or checked. """ logzero.reset_default_logger() logzero.syslog() logzero.logger.error('debug') out, err = capsys.readouterr() assert out == '' and err == ''
def test_root_logger(capsys): """ Test creating a root logger """ logzero.reset_default_logger() logger1 = logzero.setup_logger() assert logger1.name == 'logzero' logger2 = logzero.setup_logger(isRootLogger=True) assert logger2.name == 'root' logger3 = logzero.setup_logger(name='') assert logger3.name == 'root'
def test_json_logfile(capsys): # Test default logger logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name, json=True) logger.info('info') with open(temp.name) as f: content = f.read() _test_json_obj_content(json.loads(content)) finally: temp.close()
def test_loglevel(): """ Should not log any debug messages if minimum level is set to INFO """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name, level=logging.INFO) logger.debug("test log output") with open(temp.name) as f: content = f.read() assert len(content.strip()) == 0 finally: temp.close()
def test_json_default_logger(capsys): # Test default logger logzero.reset_default_logger() logzero.logger.info('info') out, err = capsys.readouterr() assert "] info" in err logzero.json() logzero.logger.info('info') out, err = capsys.readouterr() _test_json_obj_content(json.loads(err)) logzero.json(False) logzero.logger.info('info') out, err = capsys.readouterr() assert "] info" in err
def test_unicode(): """ Should log unicode """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name) logger.debug("😄 😁 😆 😅 😂") with open(temp.name, "rb") as f: content = f.read() assert "\\xf0\\x9f\\x98\\x84 \\xf0\\x9f\\x98\\x81 \\xf0\\x9f\\x98\\x86 \\xf0\\x9f\\x98\\x85 \\xf0\\x9f\\x98\\x82\\n" in repr(content) finally: temp.close()
def test_setup_logger_logfile_custom_loglevel(capsys): """ setup_logger(..) with filelogger and custom loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name, fileLoglevel=logging.WARN) logger.info("info1") logger.warning("warn1") with open(temp.name) as f: content = f.read() assert "] info1" not in content assert "] warn1" in content finally: temp.close()
def test_custom_formatter(): """ Should work with a custom formatter. """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: log_format = '%(color)s[%(levelname)1.1s %(asctime)s customnametest:%(lineno)d]%(end_color)s %(message)s' formatter = logzero.LogFormatter(fmt=log_format) logger = logzero.setup_logger(logfile=temp.name, formatter=formatter) logger.info("test log output") with open(temp.name) as f: content = f.read() assert " customnametest:" in content assert content.endswith("test log output\n") finally: temp.close()
def test_setup_logger_logfile_custom_loglevel(): """ setup_logger(..) with filelogger and custom loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name, fileLoglevel=logging.WARNING) logger.info("info1") logger.warning("warning1") with open(temp.name) as f: content = f.read() cases = {'ins': {"] warning1"}, 'outs': {"] info1"}} _check_strs_in(cases, content=content) finally: temp.close()
def test_bytes(): """ Should properly log bytes """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name) testbytes = os.urandom(20) logger.debug(testbytes) logger.debug(None) # with open(temp.name) as f: # content = f.read() # # assert str(testbytes) in content finally: temp.close()
def test_api_loglevel(capsys): """ Should reconfigure the internal logger loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logfile(temp.name) logzero.logger.info("info1") logzero.loglevel(logging.WARNING) logzero.logger.info("info2") logzero.logger.warning("warning1") with open(temp.name) as f: content = f.read() cases = {'ins': {"] info1", "] warning1"}, 'outs': {"] info2"}} _check_strs_in(cases, content=content) finally: temp.close()
def test_logfile_lower_loglevel(capsys): """ logzero.logfile(..) should work with a lower loglevel than the StreamHandler """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.loglevel(level=logging.INFO) logzero.logfile(temp.name, loglevel=logging.DEBUG) logzero.logger.debug("debug") logzero.logger.info("info") with open(temp.name) as f: content = f.read() assert "] debug" in content assert "] info" in content finally: temp.close()
def test_write_to_logfile_and_stderr(capsys): """ Should log to a file. """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger = logzero.setup_logger(logfile=temp.name) logger.info("test log output") _out, err = capsys.readouterr() assert " test_logzero:" in err assert err.endswith("test log output\n") with open(temp.name) as f: content = f.read() assert " test_logzero:" in content assert content.endswith("test log output\n") finally: temp.close()
def test_api_loglevel(capsys): """ Should reconfigure the internal logger loglevel """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logzero.logfile(temp.name) logzero.logger.info("info1") logzero.loglevel(logzero.WARN) logzero.logger.info("info2") logzero.logger.warning("warn1") with open(temp.name) as f: content = f.read() assert "] info1" in content assert "] info2" not in content assert "] warn1" in content finally: temp.close()
def test_multiple_loggers_one_logfile(): """ Should properly log bytes """ logzero.reset_default_logger() temp = tempfile.NamedTemporaryFile() try: logger1 = logzero.setup_logger(name="logger1", logfile=temp.name) logger2 = logzero.setup_logger(name="logger2", logfile=temp.name) logger3 = logzero.setup_logger(name="logger3", logfile=temp.name) logger1.info("logger1") logger2.info("logger2") logger3.info("logger3") with open(temp.name) as f: content = f.read().strip() assert "logger1" in content assert "logger2" in content assert "logger3" in content assert len(content.split("\n")) == 3 finally: temp.close()