Closed killbus closed 1 year ago
loging.DEBUG 10 ,loging.INFO 就是20,loging.WARNING就是30, 你自己打印python标准库的常量定义就知道了,这个数字不是nb_log乱发明定义的数值大小,是python标准内置库定义的常量数字。
我指的是这个位置:
↓
期望结果不应该是:
def __add_a_hanlder(self, handlerx: logging.Handler):
# handlerx.setLevel(10)
handlerx.setFormatter(self._formatter)
self.logger.addHandler(handlerx)
handler对象可以设置日志级别,logger对象也可以设置日志级别的。这是自由组合的,例如你logger是info级别,handler设置debug级别,最终你使用logger.debug还是不会记录日志的。handler级别如果是warnig,你logger.info也不会记录的。 nb_log是把添加hanlder内置化了,不希望暴露太多自由复杂组合的hanlder,所以这里设置10没毛病的。如果handler级别比logger级别低,那就是按照logger的日志级别了,例如你设置logger日志级别为logging.ERROR,你的handler级别设置DEBUG INFO ERROR 都是等效的,只要handler级别不高于logger的级别,你设置任何handler级别都是一样的效果。
你现在出了啥问题呢,难道你设置logger日志界别为20,我代码的handler级别设置了10,难道导致记录了你logger.debug的消息了吗。
感谢解惑。
如果 __add_a_hanlder()
里固定会给 handler 设置级别 10,那 __add_handlers()
里面在调用 __add_a_hanlder()
之前给 handler 设置级别不是没有意义了吗?
我碰到的问题:
相同 logger ,不同级别的日志使用不同的 handler
from nb_log import get_logger
get_logger(__name__, log_level_int=4, is_add_stream_handler=False, ding_talk_token='token')
logger = get_logger(__name__, log_level_int=2, is_add_stream_handler=True)
logger.handlers
# [<DingTalkHandler (DEBUG)> dingtalk token is token, <ColorHandler <stdout> (DEBUG)>]
logger.info('foo')
# 非期望行为: DingTalkHandler 处理了这个 info 日志
# 获得期望行为的改动:
logger.handlers[0].setLevel(40)
logger.handlers[1].setLevel(20)
logger.info('foo') # ColorHandler
logger.error('foo') # DingTalkHandler
你意思是先一个logger,根据不同的消息级别,高级别的严重消息发钉钉。
nb_log希望用户实例化两个不同的logger来实现这件事情,例如logger2 = nblog.get_logger("aaa",is_add_dingtalk=True),这样你用logger2.info的就会记录到钉钉了,你不希望发钉钉的消息用logger1 = nblog.get_logger("bbb",) logger1.info() 就可以了。 使用不同的logger对象就好了,这样就可以控制某条消息发送钉钉了
如果命名空间像这种 get_logger('django.request')
的,如何实现呢?
如果命名空间像这种
get_logger('django.request')
的,如何实现呢?
logging包内置的,用了享元模式。 logging.getLogger("abcd") is logging.getLogger("abcd") 结果是True, logging.getLogger("abcd") is logging.getLogger("efgh") 结果是False,
那要捕捉第三方包的日志并根据不同的消息级别,高级别的严重消息发钉钉
就不能简单实现了,对么?
给 handler 调整日志级别,与 Logger 一致。这样做会有什么不妥吗?毕竟我这样做,似乎可以简单实现我的需求。
logger.handlers[0].setLevel(40) # DingTalkHandler
logger.handlers[1].setLevel(20) # ColorHandler
可以的,你这样写
https://github.com/ydf0509/nb_log/blob/c0f5d2979c8e50a43f15399a0683ecf1650b17f6/nb_log/log_manager.py#L331