Ejemplo n.º 1
0
def test_guess_message_level(msg):
    setup_logging(capture_print=True, guess_level=True)

    level, msg = msg
    print(msg)
    log_data = log.read_text().splitlines()[-1].lower()
    assert log_data.count(level) == 2
Ejemplo n.º 2
0
def test_basic_function(capsys):
    setup_logging()

    logger.debug('my debug')
    logger.info('my info')
    logger.warning('my warning')
    logger.error('my error')
    logger.critical('the market crashed')

    # check stdout
    captured = capsys.readouterr()
    stdout_data = captured.out
    assert 'my debug' not in stdout_data
    assert 'my info' in stdout_data
    assert 'my warning' in stdout_data
    assert 'my error' in stdout_data
    assert 'the market crashed' in stdout_data

    # check log.txt
    log_data = log.read_text()
    assert 'my debug' in log_data
    assert 'my info' in log_data
    assert 'my warning' in log_data
    assert 'my error' in log_data
    assert 'the market crashed' in log_data
Ejemplo n.º 3
0
def test_double_setup_logging():
    # there should be a warning if setup_logging() is called multiple times
    with setup_logging() as log_config:
        with setup_logging() as log_config:
            pass

    log_data = log.read_text()
    assert "WARNING" in log_data
Ejemplo n.º 4
0
def test_capture_print_strict(capsys):
    setup_logging(capture_print=True, strict=True)

    print('This is my print')
    sys.stdout.write('This should be printed normally too')

    stdout_data = capsys.readouterr().out
    log_data = log.read_text()

    assert re.search('.*INFO.*This is my print', stdout_data)
    assert re.search('.*INFO.*This is my print', log_data)

    assert re.search('.*INFO.*This should be printed normally too',
                     stdout_data)
    assert re.search('.*INFO.*This should be printed normally too', log_data)
Ejemplo n.º 5
0
def test_default_logger_submodule():
    with setup_logging():
        from tests.sub_module import run

        run()

    log_data = log.read_text()
    assert len(re.findall(r"tests.sub_module:\d+ INFO", log_data)) == 2
Ejemplo n.º 6
0
def test_suppress_logger2(capsys):
    # suppress by the code
    with setup_logging(suppress=['suppressed_logger']):
        logger = getLogger('suppressed_logger')
        logger.info('Ha ha, this should not be logged')

    stdout_data = capsys.readouterr().out
    assert 'INFO' not in stdout_data
Ejemplo n.º 7
0
def test_suppress_logger(capsys, level):
    setup_logging(suppress_level_below=level)

    from tests.exchangelib_logger import fox_run

    fox_run()
    stdout_data = capsys.readouterr().out
    assert 'DEBUG' not in stdout_data
    assert 'INFO' not in stdout_data

    if level == logging.WARNING:
        assert 'WARNING' in stdout_data
    elif level == logging.ERROR:
        assert 'WARNING' not in stdout_data

    assert 'ERROR' in stdout_data
    assert 'CRITICAL' in stdout_data
Ejemplo n.º 8
0
def test_default_logger_suppress():
    with setup_logging() as log_config:
        from tests.sub_module import run

        log_config.suppress_loggers(['tests.sub_module'])
        run()

    log_data = log.read_text()
    assert len(re.findall(r"tests.sub_module:\d+ INFO", log_data)) == 0
Ejemplo n.º 9
0
def test_capture_print_not_strict(capsys):
    with setup_logging(capture_print=True):
        print('This is my print')
        sys.stdout.write('\n')
        sys.stdout.write('This should be printed normally')

    stdout_data = capsys.readouterr().out
    log_data = log.read_text()

    assert re.search('.*INFO.*This is my print', stdout_data)
    assert re.search('.*INFO.*This is my print', log_data)

    assert 'This should be printed normally' in stdout_data
    assert not re.search('.*INFO.*This should be printed normally',
                         stdout_data)
    assert 'This should be printed normally' not in log_data
Ejemplo n.º 10
0
def test_default_logger(capsys):
    with setup_logging():
        my_logger.debug('debug')
        my_logger.info('info')
        my_logger.warning('warning')
        my_logger.error('error')
        my_logger.critical('critical')

    stdout_data = capsys.readouterr().out
    assert 'debug' not in stdout_data
    assert 'info' in stdout_data
    assert 'warning' in stdout_data
    assert 'error' in stdout_data
    assert 'critical' in stdout_data

    log_data = log.read_text()
    assert re.search(r'test_simple:\d+.+debug', log_data)
    assert re.search(r'test_simple:\d+.+info', log_data)
    assert re.search(r'test_simple:\d+.+warning', log_data)
    assert re.search(r'test_simple:\d+.+error', log_data)
    assert re.search(r'test_simple:\d+.+critical', log_data)
Ejemplo n.º 11
0
def test_logging_disabled(capsys):
    with setup_logging():
        logger.info('Secret process starts')
        with logging_disabled():
            logger.debug('debug')
            logger.info('info')
            logger.warning('warning')
            logger.error('error')
            logger.critical('critical')
        logger.info('Secret process finished')

    stdout_data = capsys.readouterr().out
    assert 'debug' not in stdout_data
    assert 'info' not in stdout_data
    assert 'warning' not in stdout_data
    assert 'error' not in stdout_data
    assert 'critical' not in stdout_data

    log_data = log.read_text()
    assert 'debug' not in log_data
    assert 'info' not in log_data
    assert 'warning' not in log_data
    assert 'error' not in log_data
    assert 'critical' not in log_data
Ejemplo n.º 12
0
import time
import sys
from random import randint

from multiprocessing import Process
from logger_tt import setup_logging
from logging import getLogger

__author__ = "Duc Tin"
logger = getLogger(__name__)
setup_logging(use_multiprocessing=True)


def worker(arg):
    logger.info(f'child process {arg}: started')
    time.sleep(randint(1, 5) / 10)
    logger.info(f'child process {arg}: stopped')


if __name__ == '__main__':
    if len(sys.argv) > 1:
        proc_no = int(sys.argv[1])
    else:
        proc_no = 7

    all_processes = []
    logger.info('Parent process is ready to spawn child')
    for i in range(proc_no):
        p = Process(target=worker, args=(i, ))
        all_processes.append(p)
        p.daemon = True
Ejemplo n.º 13
0
import sys
from logger_tt import setup_logging
from logging import getLogger

__author__ = "Duc Tin"
setup_logging(full_context=int(sys.argv[1]))
logger = getLogger(__name__)


class Base:
    def __init__(self):
        self.name = 'Nested dot'


class Dummy:
    def __init__(self):
        self.value = 3
        self.divisor = 0
        self.base = Base()

    def details(self, arg):
        print(f'{self.value} {self.non_exist} {self.base.name}')

    def __str__(self):
        return 'Dummy(my dummy class)'


def my_function(var_in, *arg, **kwargs):
    my_local_var = 345
    var_in.details(my_local_var)
Ejemplo n.º 14
0
from logging import getLogger
from logger_tt import setup_logging

__author__ = "Duc Tin"

setup_logging(capture_print=True)
logger = getLogger(__name__)


class Dummy:
    def __str__(self):
        return f"Ahahaha\n ehehe \n lalala"


class Tummy:
    def __init__(self):
        self.dummy = Dummy()


def aloha(a):
    b = Dummy()
    c = b / a.dummy


if __name__ == '__main__':
    a = Tummy()
    aloha(a)
Ejemplo n.º 15
0
from logger_tt import setup_logging
from logging import getLogger


__author__ = "Duc Tin"
setup_logging(full_context=1)
logger = getLogger(__name__)


class Dummy:
    def __init__(self):
        self.value = 3
        self.divisor = 0

    def __str__(self):
        return 'Dummy(my dummy class)'


def my_function(var_in, *arg, **kwargs):
    my_local_var = 345
    raise RuntimeError


if __name__ == '__main__':
    a = Dummy()
    my_function(a, 456, 789, my_kw='hello', another_kw='world')
Ejemplo n.º 16
0
from logger_tt import setup_logging
from logging import getLogger

__author__ = "Duc Tin"
setup_logging(full_context=True)
logger = getLogger(__name__)


class Base:
    def __init__(self):
        self.name = 'Nested dot'


class Dummy:
    def __init__(self):
        self.value = 3
        self.divisor = 0
        self.base = Base()

    def details(self, arg):
        print(f'{self.value} {self.non_exist} {self.base.name}')

    def __str__(self):
        return 'Dummy(my dummy class)'


def my_function(var_in, *arg, **kwargs):
    my_local_var = 345
    var_in.details(my_local_var)

Ejemplo n.º 17
0
from logger_tt import setup_logging
from logging import getLogger

__author__ = "Duc Tin"
setup_logging()
logger = getLogger(__name__)


class Dummy:
    def __init__(self):
        self.value = 3
        self.divisor = 0


if __name__ == '__main__':
    a = Dummy()
    res = a.value / a.divisor
    print(res)
Ejemplo n.º 18
0
def test_multiprocessing_error(value):
    with pytest.raises(ValueError) as e:
        setup_logging(use_multiprocessing=value)

    assert f'Expected a bool or a multiprocessing start_method name, but got: {value}' in str(e)