我正在尝试从我正在使用的库中获取日志(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库中进入我的记录器。
有人可以帮我理解这里可能会发生什么吗?
答案 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?