Skip to main content
 首页 » 编程设计

python之自举 Pyramid 中的日志记录设置问题

2025年05月04日9cyq1162

我正在尝试使用 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')