# How can I log response body in APM in python

**URL:** <https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733>\
**Category:** APM\
**Tags:** python\
**Created:** [February 18, 2020, 8:33am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733 "2020-02-18T08:33:38Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![alza](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alza/32/50143_2.png) [@alza](https://discuss.elastic.co/u/alza)\
**Post date:** [February 18, 2020, 8:33am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/1 "2020-02-18T08:33:39Z")

</div>

I have a Flask API, and I want to log responses body using APM. I used this example code:

```auto
from elasticapm.contrib.flask import ElasticAPM
from flask import Flask

app = Flask( __name__ )
apm = ElasticAPM(app, server_url='http://localhost:8200', service_name='flask-app-1', logging=True)

@app.route('/')
def hello_world():
    resp = "Hello, World!"
    return resp

if __name__ == ' __main__':
    app.run()

```

I have seen `set_custom_context` in [here](https://www.elastic.co/guide/en/apm/agent/python/master/api.html), but I don't know how to use in above code to send also the `resp` to APM.

---

<div class="post-metadata">

**Author:** ![beniwohli](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/beniwohli/32/21256_2.png) [@beniwohli](https://discuss.elastic.co/u/beniwohli)\
**Post date:** [February 18, 2020, 9:49am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/2 "2020-02-18T09:49:58Z")

</div>

Hi @alza

Have a look at the [`capture_body`](https://www.elastic.co/guide/en/apm/agent/python/current/configuration.html#config-capture-body) setting, it might be exactly what you're looking for 🙂

---

<div class="post-metadata">

**Author:** ![alza](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alza/32/50143_2.png) [@alza](https://discuss.elastic.co/u/alza)\
**Post date:** [February 18, 2020, 2:21pm UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/3 "2020-02-18T14:21:03Z")

</div>

Thanks @beniwohli. If I understand correctly, `capture_body` only captures the _request_ body not **response** body.

---

<div class="post-metadata">

**Author:** ![basepi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/basepi/32/53056_2.png) [@basepi](https://discuss.elastic.co/u/basepi)\
**Post date:** [February 18, 2020, 3:19pm UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/4 "2020-02-18T15:19:27Z")

</div>

Can you show an example of how you're using `set_custom_context`? As long as it's set during a sampled transaction (i.e., in your `hello_world()` above), it should be sent automatically with the transaction when the transaction is sent. You shouldn't have to do anything extra.

---

<div class="post-metadata">

**Author:** ![alza](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alza/32/50143_2.png) [@alza](https://discuss.elastic.co/u/alza)\
**Post date:** [February 19, 2020, 6:21am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/5 "2020-02-19T06:21:54Z")

</div>

I didn't set `set_custom_context` in my `hello_world()` example above, actually I want to know how to set it? So, then, be able to see the response of requests in Kibana.

---

<div class="post-metadata">

**Author:** ![alza](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alza/32/50143_2.png) [@alza](https://discuss.elastic.co/u/alza)\
**Post date:** [February 19, 2020, 7:22am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/6 "2020-02-19T07:22:05Z")

</div>

I found the solution [here](https://discuss.elastic.co/t/how-to-add-contextual-information-with-flask-plugin/143066/5)! and accordingly changed my example as follow:

```auto
import elasticapm
from flask import Flask
from elasticapm.contrib.flask import ElasticAPM

app = Flask( __name__ )
app.config['ELASTIC_APM'] = {
    'DEBUG': True,
    'SERVER_URL': 'http://localhost:7200',
    'SERVICE_NAME': 'test-service',
}
apm = ElasticAPM(app)

@app.route('/')
def hello_world():
    resp = {"msg": "Hello world!"}
    elasticapm.set_custom_context({'body': resp})
    return 'OK'

if __name__ == ' __main__':
    app.run()

```

---

<div class="post-metadata">

**Author:** ![beniwohli](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/beniwohli/32/21256_2.png) [@beniwohli](https://discuss.elastic.co/u/beniwohli)\
**Post date:** [February 19, 2020, 8:43am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/7 "2020-02-19T08:43:16Z")

</div>

Glad you found the solution, and sorry about the confusion with request/response body in my previous answer.

---

<div class="post-metadata">

**Author:** ![alza](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alza/32/50143_2.png) [@alza](https://discuss.elastic.co/u/alza)\
**Post date:** [February 19, 2020, 11:08am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/8 "2020-02-19T11:08:11Z")

</div>

No problem, thanks @beniwohli.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [March 11, 2020, 7:08am UTC](https://discuss.elastic.co/t/how-can-i-log-response-body-in-apm-in-python/219733/9 "2020-03-11T07:08:12Z")

</div>

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.
