python logging.getLogger(__ name__)的问题

时间:2014-12-08 23:07:47

标签: python logging flask uwsgi celery-task

我正在尝试从我正在使用的库中获取日志(PyAPNs)。它肯定不是开箱即用的。我查看了库代码以查看它们用于记录器的内容,并使用logging.getLogger()方法。

预先存在的PyAPNs库日志代码:

_logger=logging.getLogger(__name__)

这是一个坏主意,我试图让它运作,但我没有运气:

我的应用程序代码(示例不好主意):

from apns import APNs

class Notifier():

def __init__(self, logger):

    self.logger = logger
    self.apns_client = APNs(arg_list)
    self.apns_client._logger = self.logger

def send_message:

    ...        
    self.apns_client.gateway_server.send_notification(token, payload, identfier=id)        
    ...

这不起作用

从celery任务调用库(send_message)。所有日志记录在Notifier类和celery任务中都可以正常工作,只是没有任何内容从PyAPNs库中进入我的记录器。

有人可以帮我理解这里可能会发生什么吗?

1 个答案:

答案 0 :(得分:0)

如果您想自定义日志处理程序到库的记录器,只需在

配置

1)高级记录器(例如root logger)。作为logging-cookbook

的参考
rootLogger = logging.getLogger('')
rootLogger.setLevel(logging.DEBUG)
socketHandler = logging.handlers.SocketHandler('localhost',
                    logging.handlers.DEFAULT_TCP_LOGGING_PORT)
# don't bother with a formatter, since a socket handler sends the event as
# an unformatted pickle
rootLogger.addHandler(socketHandler)

# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')

# Now, define a couple of other loggers which might represent areas in your
# application:

logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')

2)或捕获库的记录器并明确配置

apns_logger = logging.getLogger(apns.__name__)
apns_logger.addHandler(xxx)

3)或使用过滤器过滤掉第三方模块的记录器How can I access the current executing module or class name in Python?