使用 Pyramid pshell 登录到控制台

Logging to console with Pyramid pshell

在开发 Pyramid web 应用程序的过程中,我发现使用命令行 pshell 加载应用程序并与各种代码交互非常有用。但是,控制台上没有回显日志语句,我不确定为什么。

例如,假设在 common.utilities.general 中我有一个函数:

import logging

log = logging.getLogger(__name__)

def my_util():
    log.debug("Executing utility.")
    return "Utility was executed."

然后在我的命令行中:

(pyenv)rook:swap nateford$ pshell src/local.ini 
2015-10-08 14:44:01,081 INFO  [common.orm.pymongo_core][MainThread] PyMongo Connection to replica set successful: localhost:27017
2015-10-08 14:44:01,082 INFO  [common.orm.pymongo_core][MainThread] Connected to Mongo Database = turnhere
Python 3.4.3 (default, Mar 10 2015, 14:53:35) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help" for more information.

Environment:
  app          The WSGI application.
  registry     Active Pyramid registry.
  request      Active request object.
  root         Root of the default resource tree.
  root_factory Default root factory used to create `root`.

>>> from common.utilities.general import my_util
>>> my_util()
'Utility was executed.'
>>> 

如您所见,控制台没有日志。我希望:

>>> from common.utilities.general import my_util
>>> my_util()
[some date/server info][DEBUG]: Executing utility.
'Utility was executed.'
>>> 

这是我的 local.ini 文件的(相关)内容:

<Various elided application settings>
###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/1.5-branch/narr/logging.html
###

[loggers]
keys = root, common, webapp, services, sqlalchemy

[handlers]
keys = console, applog

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console, applog

[logger_common]
level = DEBUG
handlers =
qualname = common

[logger_services]
level = DEBUG
handlers =
qualname = common.services

[logger_webapp]
level = DEBUG
handlers =
qualname = webapp

[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither.  (Recommended for production systems.)

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

[handler_applog]
class = FileHandler
args = (r'%(here)s/log/app.log','a')
level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

您的 root 的记录器日志记录级别设置为 INFO,该级别高于 DEBUG,后者是您记录消息的级别。将 root 的记录器级别更改为 DEBUG 应该会有所帮助。