【问题标题】:How to decode the persisted log files from App Engine's Python Dev_server如何从 App Engine Python Dev Server 解码持久日志文件
【发布时间】:2014-06-15 02:36:32
【问题描述】:

使用 Google App Engine 的本地 dev_server,published options 之一是将日志文件保存到磁盘。

“如果您希望将日志从开发服务器保存到您自己的磁盘位置>选择,请为 --logs_path 命令行选项提供所需的路径和文件名,如下所示:

dev_appserver.py --logs_path=your-path/your-logfile-name your-app-directory"

除了文件是我无法解码的二进制格式之外,这可行。

Google 发布了一些 sample code,但这是为了让应用程序读取生产日志。

是否有可以解码 dev_server 存储的日志文件的命令行实用程序或 python 脚本?这是在 2011 年以feature request 提交的。

我可以在 PyDev 控制台中看到生成的日志,但是一旦重新启动当前执行,这些日志就会从该控制台中消失。

有一些suggestions 用于管道日志文件 unix 样式,但这对已存储的日志没有帮助。

【问题讨论】:

    标签: python google-app-engine logging


    【解决方案1】:

    创建的日志文件是一个 SQLite 数据库。使用sqlite3 module 访问它。

    使用的架构是:

    CREATE TABLE AppLogs (
      id INTEGER NOT NULL PRIMARY KEY,
      request_id INTEGER NOT NULL,
      timestamp INTEGER NOT NULL,
      level INTEGER NOT NULL,
      message TEXT NOT NULL,
      FOREIGN KEY(request_id) REFERENCES RequestLogs(id)
    );
    CREATE TABLE RequestLogs (
      id INTEGER NOT NULL PRIMARY KEY,
      user_request_id TEXT NOT NULL,
      app_id TEXT NOT NULL,
      version_id TEXT NOT NULL,
      module TEXT NOT NULL,
      ip TEXT NOT NULL,
      nickname TEXT NOT NULL,
      start_time INTEGER NOT NULL,
      end_time INTEGER DEFAULT 0 NOT NULL,
      method TEXT NOT NULL,
      resource TEXT NOT NULL,
      http_version TEXT NOT NULL,
      status INTEGER DEFAULT 0 NOT NULL,
      response_size INTEGER DEFAULT 0 NOT NULL,
      user_agent TEXT NOT NULL,
      url_map_entry TEXT DEFAULT '' NOT NULL,
      host TEXT NOT NULL,
      task_queue_name TEXT DEFAULT '' NOT NULL,
      task_name TEXT DEFAULT '' NOT NULL,
      latency INTEGER DEFAULT 0 NOT NULL,
      mcycles INTEGER DEFAULT 0 NOT NULL,
      finished INTEGER DEFAULT 0 NOT NULL
    );
    

    RequestLogs 包含 HTTP 请求(来自浏览器或任务队列); AppLogs 包含在特定请求期间记录的所有日志条目。

    【讨论】:

    • #谢谢,我试过了,它有效。 import sqlite3 conn = sqlite3.connect('bunjilae.log') c = conn.cursor() i = 0 for row in c.execute('SELECT * FROM AppLogs ORDER BY timestamp'): 打印行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多