예제 #1
0
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()
예제 #2
0
def test_api_loglevel_custom_handlers(capsys):
    """
    Should reconfigure the internal logger loglevel and custom handlers
    """
    logzero.reset_default_logger()
    # TODO
    pass
예제 #3
0
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
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
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()
예제 #7
0
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()
예제 #8
0
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()
예제 #9
0
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()
예제 #10
0
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()
예제 #11
0
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()
예제 #12
0
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 == ''
예제 #13
0
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'
예제 #14
0
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()
예제 #15
0
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()
예제 #16
0
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
예제 #17
0
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()
예제 #18
0
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()
예제 #19
0
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()
예제 #20
0
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()
예제 #21
0
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()
예제 #22
0
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()
예제 #23
0
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()
예제 #24
0
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()
예제 #25
0
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()
예제 #26
0
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()