почему регистратор ничего не печатает? - PullRequest
0 голосов
/ 17 октября 2019

import logging
import sys

class A(object):
    def __init__(self):
        ch = logging.StreamHandler(stream=sys.stdout)
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
        ch.setFormatter(formatter)
        logger = logging.getLogger("logger_a")
        logger.setLevel(logging.DEBUG)
        logger.addHandler(ch)
        self.logger = logger   

    def Xprint(self):
        self.logger.info("this log a!!")
        Xprint()

def Xprint():
    logger = logging.getLogger("logger_b")
    print logger.info("this log b!!")

a = A()
a.Xprint()

вывод:

2019-10-17 19:02:20,574 logger_a INFO: this log a!!
None

почему logger_b ничего не печатает?

1 Ответ

0 голосов
/ 17 октября 2019

По умолчанию loglevel равно WARNING. Если вы хотите, чтобы logger_b также регистрировался, вам нужно сделать что-то вроде:

$ cat log.py
import logging
import sys

class A(object):
    def __init__(self):
        ch = logging.StreamHandler(stream=sys.stdout)
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
        ch.setFormatter(formatter)
        logger = logging.getLogger("logger_a")
        logger.setLevel(logging.DEBUG)
        logger.addHandler(ch)
        self.logger = logger
        self.handler = ch

    def Xprint(self):
        self.logger.info("this log a!!")
        Xprint(self.handler)

def Xprint(handler):
    logger = logging.getLogger('logger_b') # no handler is configured yet
    logger.setLevel(logging.DEBUG) # set the level
    logger.addHandler(handler) # added handler
    logger.info("this log b!!")

a = A()
a.Xprint()

Вывод:

$ python log.py
2019-10-17 17:02:26,418 logger_a INFO: this log a!!
2019-10-17 17:02:26,418 logger_b INFO: this log b!!
...