zen*_*bor 9 python logging google-app-engine
GoogleAppEngineLauncher可以在开发过程中显示我的应用程序在我的Mac上运行时的本地日志文件.但是,我无法更改那里的字体大小,所以我想使用该tail命令自己观看日志文件.
这是一个遗憾,但我找不到日志文件.他们不在/var/log/,~/Library/Logs或/Library/Logs.你知道他们在哪里吗?
(也许没有物理文件,只有python开发环境的标准输出,所以日志只在启动器应用程序中可用.)
正如你猜测的那样,并且可以通过研究源文件来确认/usr/local/google_appengine/google/appengine/tools/dev_appserver.py,日志没有被写入磁盘(一个cStringIO.StringIO实例用于将它们保存在内存中,因为其余代码的目的是将它们"写入"类似文件的对象").
我建议的是编写自己的应用服务器脚本,它只导入一个方法,导入dev_appserver,子类dev_appserver.ApplicationLoggingHandler和覆盖:
from google.appengine.tools import dev_appserver
class MyHandler(dev_appserver.ApplicationLoggingHandler):
def __init__(self, *a, **k):
dev_appserver.ApplicationLoggingHandler.__init__(self, *a, **k)
self.thefile = open('/tmp/mylog.txt', 'w')
def emit(self, record):
dev_appserver.ApplicationLoggingHandler(self, record)
self.thefile.write(str(record) + '\n')
self.thefile.flush()
Run Code Online (Sandbox Code Playgroud)
您还需要确保使用此类而不是标准类,例如通过子类化调度程序或确保使用其依赖注入功能.(dev_appserver_main.py我认为,让你更好地控制它).
我认为这种自定义方法比应该的方法要麻烦得多(毕竟,将日志写入文件是完全正常的 - 要么按照您的意愿显示它们,要么稍后用一些辅助脚本来处理它们),所以我还建议在app引擎的跟踪器上添加一个功能请求:dev_appserver.py应该再接受一个标志,如果指定的话,它会给出将日志写入磁盘的路径.
而且,说实话,如果我现在需要这个功能,我自己,我会用脏的方式做:编辑该.py文件(及其相关的_main.py)以添加所述标志及其使用.这应该是十几行,比我刚才概述的"规范"方式容易得多.当然,这是肮脏的,因为每当有一个新的SDK,你将不得不重新应用补丁,并再次,再次...这就是为什么人们应该还提出了基于GAE的跟踪补丁,作为特征请求的一部分我建议,希望很快就能被接受! - )
其中许多答案现已过时.:)
在今天devappserver,--logs_path=LOGS_FILE如果您想要登录文件(使用其原生sqlite数据库格式),请使用.或者如评论中所建议的那样,如果输出过于复杂,只需输出输出.
由于存在日志API,它实际上现在将日志条目存储在文件中(--storage_path如果未设置).不过,我自己也注意到了一些错误.(我假设它们现在不存在,自从我使用它以来已经有一段时间了.)
| 归档时间: |
|
| 查看次数: |
7193 次 |
| 最近记录: |