我正在尝试使用 python 2.7.2 和 pyramid 1.2.3 在 Pyramid 中进行简单的文件日志记录配置
它根本没有像我预期的那样工作。看起来即使我正在引导进入 Pyramid ,它也没有加载正确的日志。 test.py 中的以下具体问题:
测试.py
from pyramid.paster import bootstrap
env = bootstrap('../test.ini')
import logging
logging.basicConfig() #this apparently makes no difference
log=logging.getLogger('root') #same thing if I do getLogger(__name__) - it doesn't find the proj one.
print log.handlers
>>> []
这很奇怪!没有处理程序?显然这不是我想的日志。
print log
>>> logging.Logger
它不应该是一个 RootLogger 吗?
print log.parent
>>> [<logging.RootLogger>]
嗯所以 getLogger('root') 的父级是真正的 RootLogger?让我们看看它的处理程序是什么:
print log.parent.handlers
>>> [<logging.StreamHandler>]
这很奇怪。
测试.ini:
[app:proj]
use = egg:proj
sqlalchemy.url = mysql+mysqldb://proj_staging:pw@localhost/proj_staging?charset=utf8
# This apparently helps avoid mysql gone away errors
sqlalchemy.pool_recycle = 3600
[pipeline:main]
pipeline = proj
[loggers]
keys = root, proj
[handlers]
keys = console, file
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = file
qualname=root
[logger_proj]
level = DEBUG
handlers =
qualname = proj
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[handler_file]
class = FileHandler
args=('../logs/proj.log','a')
formatter = generic
level = INFO
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
请您参考如下方法:
Pyramid 在引导时不加载日志配置。如果你想提出一个应该的论点,请在https://github.com/Pylons/pyramid/issues开票。
无论如何,自己加载日志信息非常简单:
import logging
import logging.config
from pyramid.paster import bootstrap
logging.config.fileConfig('../test.ini')
env = bootstrap('../test.ini')
log = logging.getLogger(__name__)
log.debug('foo')
