qwe*_*rty 56 python logging handler
我是python的新手.我正在尝试登录python并且遇到了在尝试通过logger实例打印一些警告时,没有找到处理程序错误的处理程序.以下是我试过的代码
import logging
logger=logging.getLogger('logger')
logger.warning('The system may break down')
Run Code Online (Sandbox Code Playgroud)
我收到此错误没有找到记录器"logger"的处理程序
令我困惑的是,当我第一次尝试使用logging
然后通过打印警告时logger
,它工作得很好,就像
>>> import logging
>>> logging.warning('This is a WARNING!!!!')
WARNING:root:This is a WARNING!!!!
>>>
>>> logger.warning('WARNING!!!!')
WARNING:logger:WARNING!!!!
Run Code Online (Sandbox Code Playgroud)
有人可以对第二种情况下发生的事情有所了解吗?
phd*_*phd 70
调用logging.basicConfig():
>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger('logger')
>>> logger.warning('The system may break down')
WARNING:logger:The system may break down
Run Code Online (Sandbox Code Playgroud)
pra*_*890 19
为了记录一些消息logger
,在Python中至少应该向logger
对象添加一个处理程序.默认情况下debug
,warn
在和其他功能logging
模块将调用basicConfig
这反过来将增加StreamHandler
至root logger
.
始终建议将所需的处理程序添加到您为模块编写的记录器对象中.
您可以参考官方Python文档,它有一个很棒的教程,或者您可以自己更好地查看日志模块的源代码.
您只需在Python shell中检查源代码,
import logging
import inspect
print(inspect.getsource(logging))
Run Code Online (Sandbox Code Playgroud)
use*_*754 13
除了phd的答案,调用logging.basicConfig()
是一个方便的功能,它将获得默认值StreamHandler
和Formatter
.如果您想快速拥有日志记录功能,那就足够了.您可以通过传递basicConfig
一些参数来自定义它的行为:
添加有用的参数:在消息旁边输出时间戳
logger = logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
Run Code Online (Sandbox Code Playgroud)
对于大多数一次性需求,这应该没问题.如果您需要对配置进行更多控制,可以通过定义记录器的属性来添加更复杂的行为.
复杂的例子:不使用该
basicConfig
功能
import logging
logger = logging.getLogger("mylogger")
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
logger.info("Files copied")
logger.warning("disk quota exceeded")
>> 2017-12-06 11:11:12, 090 - mylogger - INFO Files copied
>> 2017-12-06 11:11:12, 091 - mylogger - WARNING disk quota exceeded
Run Code Online (Sandbox Code Playgroud)
更大环境中的下一步是从先前创建的记录器中获取新记录器,首先保持格式化以及维护"日志层次结构"
logger2 = logging.getLogger("mylogger.new")
logger2.info("New Logger info")
>> 2017-12-06 11:11:12, 091 - mylogger.new - New logger info
Run Code Online (Sandbox Code Playgroud)
一个很好的参考是日志食谱: https ://docs.python.org/2/howto/logging-cookbook.html
归档时间: |
|
查看次数: |
72639 次 |
最近记录: |