金字塔根记录器无法按预期工作

问题描述

我正在运行一个金字塔式Web应用程序,并且我想拥有两个日志,第一个日志应将所有内容输出到控制台(stderr),而另一个则写入文件。 我的ini文件的相关部分如下所示:

[loggers]
keys = root,pyramide

[handlers]
keys = console,logfile

[formatters]
keys = simple,detailed

[logger_root]
level = DEBUG
handlers = console

[logger_pyramide]
level = DEBUG
handlers = logfile
qualname = pyramide

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = DEBUG
formatter = detailed

[handler_logfile]
class = handlers.RotatingFileHandler
args = ('monitoreo.log','a',10000)
level = DEBUG
formatter = simple

[formatter_simple]
format = %(asctime)s %(levelname)-5.5s %(message)s

[formatter_detailed]
format = %(asctime)s %(levelname)-5.5s [%(pathname)s:%(lineno)s] %(message)s %(args)s %(exc_info)s

注意:对于该测试,我已经将每个级别都设置为DEBUG。我最终将改变它。

在我的 __ init __。py 中,我有这个(我只张贴代码的相关部分):

from logging import getLogger
pyramide_log = getLogger('pyramide')
root_log = getLogger('whatever')
pyramide_log.debug("greetings from __init__ .. pyramide")
root_log.debug("greetings from __init__ .. root")


def root_factory(request):
    conn = get_connection(request)
    return appmaker(conn.root())


def main(global_config,**settings):
    pyramide_log.info("starting web app.. pyramide")
    root_log.info("starting web app.. root")
    with Configurator(settings=settings) as config:

并且在我拥有导入之后的 views / __ init __。py 中(仅相关行):

from logging import getLogger
pyramide_log = getLogger('pyramide')
root_log = getLogger('whatever')
pyramide_log.debug("greetings from views/__init__ .. pyramide")
root_log.debug("greetings from views/__init__ .. root")

现在的问题是,当我启动应用程序并刷新开始页面时,我在日志文件中找到了我期望的内容

2020-10-07 18:59:14,366 DEBUG greetings from __init__ .. pyramide
2020-10-07 18:59:14,384 INFO  starting web app.. pyramide
2020-10-07 18:59:14,758 DEBUG greetings from views/__init__ .. pyramide

但是在控制台中,我看到的是

Starting monitor for PID 21712.
2020-10-07 18:59:14,366 DEBUG [pyramide/__init__.py:12] greetings from __init__ .. pyramide () None
2020-10-07 18:59:14,366 DEBUG [pyramide/__init__.py:13] greetings from __init__ .. root () None
2020-10-07 18:59:14,384 INFO  [pyramide/__init__.py:22] starting web app.. pyramide () None
2020-10-07 18:59:14,384 INFO  [pyramide/__init__.py:23] starting web app.. root () None
2020-10-07 18:59:14,572 DEBUG [venv/lib/python3.7/site-packages/ZODB/BaseStorage.py:83] create storage route/to/Data.fs ('route/to/Data.fs',) None
2020-10-07 18:59:14,573 DEBUG [venv/lib/python3.7/site-packages/transaction/_transaction.py:108] new transaction () None
2020-10-07 18:59:14,573 DEBUG [venv/lib/python3.7/site-packages/transaction/_transaction.py:289] commit () None
2020-10-07 18:59:14,758 DEBUG  greetings from views/__init__ .. pyramide : ()
Starting server in PID 21712.
Serving on http://0.0.0.0:6543

我没想到的第一件事就是pyramide_log的消息,我可以接受,没问题。我不明白的是:

  1. 为什么第一个条目遵循定义的格式,但最后一个条目不遵循。它与文件被抛出的位置有什么区别吗?为什么?
  2. 为什么我使用pyramide_log而不是root_log从 views / __ init __。py 获得“问候”?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)