python-3.x - Python 记录器混淆
问题描述
我试图了解 python 日志记录,我有这个:
主要.py:
import logging
from Foo import Foo
logging.basicConfig(level=logging.DEBUG)
fh_formatter = logging.Formatter('[%(asctime)s : %(levelname)s : %(name)s] : %(message)s')
file_handler = logging.FileHandler('logger.log', mode='w')
file_handler.setFormatter(fh_formatter)
file_handler.setLevel(logging.DEBUG)
sh_formatter = logging.Formatter('%(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(sh_formatter)
stream_handler.setLevel(logging.DEBUG)
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
logger.info('Running main')
Foo().print_foo()
foo.py
import logging
from Bar import Bar
logger = logging.getLogger(__name__)
class Foo():
def print_foo(self):
Bar().print_bar()
logger.info('Inside Foo.foo')
酒吧.py:
import logging
logger = logging.getLogger(__name__)
class Bar():
def print_bar(self):
logger.info('Inside Bar.bar')
当我运行代码时,在控制台上我看到了这个输出:
Running main
INFO:__main__:Running main
INFO:Bar:Inside Bar.bar
INFO:Foo:Inside Foo.foo
但是当我检查时logger.log
,我只看到一行
[2019-03-23 18:46:01,276 : INFO : __main__] : Running main
我怎样才能让我看到这两个地方的所有线条?我是否需要为每个文件中的每个记录器设置文件处理程序和流处理程序?如果我有一个 python 项目,并且我想要一个日志文件以及控制台输出,那么正确的方法是什么?
解决方案
问题出在 Foo 和 Bar 的这一行:
logger = logging.getLogger(__name__)
请注意,您只重置了 中的日志记录处理程序Main.py
,记录器名称为,如您在输出中看到的那样__name__
解析为。"__main__"
当您从 获取记录器时Foo.py
,您的记录器名称是"Foo"
,因此您设置的所有内容都"__main__"
不会应用。
你想做的事:改变__name__
零件。例如,您的应用程序被调用,fubar
然后您执行以下操作Main.py
:
logger = logging.getLogger("fubar")
在 中Foo.py
,作为应用程序中的子模块,执行以下操作:
logger = logging.getLogger("fubar.Foo")
或者,如果您愿意,您甚至可以使用相同的名称。这样,分配在更高级别的处理程序将传递到子级别。
推荐阅读
- php - 用于从切换列表中提取基于域的电子邮件的 PHP 脚本
- javascript - 从本地路径读取视频
- google-cloud-platform - 澳大利亚地区数据集的云作曲家问题
- bash - 如何将查询结果传递给shell
- cookies - 未在 IE11 windows 7 上为 iframe 应用程序设置 Cookie
- javascript - Reactjs - 对象键 - 如何 ketrive?
- r - 使用 R 中的嵌套行子集创建新列
- git - 将更改从一个分支移动到另一个分支
- google-apps-marketplace - 尝试删除已添加到 G-Suite Market Place 的附加组件
- git - 关于 git diff