python - python日志记录设置调试级别
问题描述
当我运行下面的代码时,日志记录工作正常。但是当我在 setup_logger 下评论 #1) 和 #2) 时,不会显示日志。
#1) 和 #2) 在这里做什么?
import logging
import sys
def get_logger(name):
print('get_logger -- ', name)
log = logging.getLogger("hello.{}".format(name))
return log
def setup_logger():
print('setup_logger')
root = logging.getLogger("")
root.setLevel(logging.ERROR)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter(
fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
))
root.addHandler(handler)
logger = logging.getLogger("hello") #1
logger.setLevel(logging.DEBUG) #2
LOG = get_logger(__name__)
setup_logger()
print(LOG)
def main():
LOG.debug('hello')
if __name__ == '__main__':
main()
解决方案
您标记的第一行获取一个具有给定名称的记录器。如果当前没有您提供的名称的记录器,将创建一个新记录器(也称为Singleton)。您可以logging.getLogger
在 Python 文档中了解更多信息:
返回具有指定名称的记录器,或者,如果名称为 None,则返回作为层次结构的根记录器的记录器。如果指定,名称通常是点分隔的分层名称,如“a”、“a.b”或“abcd”。这些名称的选择完全取决于使用日志记录的开发人员。
使用给定名称对该函数的所有调用都返回相同的记录器实例。这意味着记录器实例永远不需要在应用程序的不同部分之间传递。
您标记的第二行设置记录器实例的日志级别。如果您将日志级别设置为DEBUG
,则您记录的所有消息都将打印到控制台/文件。如果将其设置为INFO
,将记录除调试消息之外的所有消息。等等。再次引用文档:
将此记录器的阈值设置为级别。低于级别的日志消息将被忽略;具有严重级别或更高级别的日志消息将由为该记录器提供服务的任何一个或多个处理程序发出,除非处理程序的级别已设置为比级别更高的严重级别。
创建记录器时,级别设置为 NOTSET(当记录器是根记录器时会处理所有消息,或者当记录器是非根记录器时会委托给父级)。请注意,根记录器是使用 WARNING 级别创建的。
如果你还有问题,我可以编辑我的帖子来回答。
推荐阅读
- java - Maven:如何创建源文件和测试文件的jar文件?
- java - 频道 ManagedChannelImpl{logId=1, target=photoslibrary.googleapis.com:443} 未正确关闭
- regular-language - 将常规语言插入到其他常规语言中
- laravel - 不应静态调用非静态方法 Illuminate\Routing\Route::middleware()
- docker - Docker 产生不正确的 ENTRYPOINT 命令
- javascript - 运行 npm start 时,要启动一个反应项目,我在终端上收到以下消息
- php - Apache 未在 XAMPP 中启动
- c++ - 使用 openmp 锁的可疑分段错误
- javascript - `npm install` 中 '-save' 和 '--save' 的区别
- android - 如何使用 findNavController 动态设置导航主机
而不是来自 ?