Debugging Guillotina will be slightly different from other web application that are not asyncio but Guillotina provides some nice integration to help you out.

X-Debug header

Any any request, you can provide the header X-Debug:1 and Guillotina will output debugging headers in the response about timing, number of queries and cache hit/miss stats.

GET /(db)/(container)

Retrieves serialization of resource

  • Permission: guillotina.ViewContent
  • Context: guillotina.interfaces.content.IResource


GET /db/container HTTP/1.1
Accept: application/json
Authorization: Basic cm9vdDpyb290
X-Debug: 1


curl -i http://nohost/db/container -H 'Accept: application/json' -H 'X-Debug: 1' --user root:root


http http://nohost/db/container Accept:application/json X-Debug:1 -a root:root


HTTP/1.1 200 OK
Content-Length: 512
Content-Type: application/json
XG-Num-Queries: 0
XG-Request-Cache-hits: 0
XG-Request-Cache-misses: 3
XG-Request-Cache-stored: 3
XG-Timing-0-start: 0.26417
XG-Timing-1-traversed: 0.24056
XG-Timing-2-beforeauthentication: 0.13280
XG-Timing-3-authentication: 0.09370
XG-Timing-4-viewfound: 0.15879
XG-Timing-5-authorization: 0.61226
XG-Timing-6-viewrender: 0.02718
XG-Timing-7-viewrendered: 1.20950
XG-Timing-8-renderer: 0.12207
XG-Timing-9-headers: 0.01979
XG-Timing-Total: 2.88081
XG-Total-Cache-hits: 0
XG-Total-Cache-misses: 6
XG-Total-Cache-stored: 6

    "@id": "",
    "@type": "Container",
    "@name": "container",
    "@uid": "0c42b53cc86e45918a762f5ada113dc8",
    "@static_behaviors": [],
    "parent": {},
    "is_folderish": true,
    "creation_date": "2019-02-18T12:31:10.917638+00:00",
    "modification_date": "2019-02-18T12:31:10.917638+00:00",
    "UID": "0c42b53cc86e45918a762f5ada113dc8",
    "type_name": "Container",
    "title": "container",
    "uuid": "0c42b53cc86e45918a762f5ada113dc8",
    "__behaviors__": [],
    "__name__": "container",
    "items": [],
    "length": 0
Query Parameters:
  • include (string) –
  • omit (string) –
Status Codes:


On startup, you can also provide the environment variable GDEBUG=true. This will provide detailed query statistics with the X-Debug:1.


Guillotina also provides integration with the aiomonitor python module. This module allows you to attach to a running python with asyncio to inspect the active tasks running.

First, install aiomonitor:

pip install aiomonitor

Then, run guillotina with --monitor:

g server --monitor

Finally, connect to it:

python -m aiomonitor.cli


Guillotina also works with Jupyter notebooks. Load the example notebook in the guillotina repository to see an example of how to get started.