# Logging request details

**URL:** <https://discourse.slimframework.com/t/logging-request-details/1149>\
**Category:** Questions\
**Created:** [February 14, 2017, 11:05am UTC](https://discourse.slimframework.com/t/logging-request-details/1149 "2017-02-14T11:05:51Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![gunalan87](https://avatars.discourse-cdn.com/v4/letter/g/f1d935/32.png) [@gunalan87](https://discourse.slimframework.com/u/gunalan87)\
**Post date:** [February 14, 2017, 11:05am UTC](https://discourse.slimframework.com/t/logging-request-details/1149/1 "2017-02-14T11:05:51Z")

</div>

I like to logging request and response in my project.

I can able to log the response details.

But I need to log the details of the request.

How to do that?

I am using the following code.

```
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

use Monolog\Formatter\LineFormatter;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Interop\Container\ContainerInterface;
require 'vendor/autoload.php';

$config['displayErrorDetails'] = true;
$config['addContentLengthHeader'] = false;

$config['db']['host'] = "localhost";
$config['db']['user'] = "user";
$config['db']['pass'] = "user";
$config['db']['dbname'] = "slim";

$app = new \Slim\App(["settings" => $config]);
$app->get('/', function (Request $req, Response $res, $args = []) {

$dateFormat = "y-m-d H:i:s";
$output = "[%datetime%] %level_name% : %message%\n";

$formatter = new LineFormatter($output, $dateFormat);

$stream = new StreamHandler("logfiles/".date('m-d')."_file.log", Logger::INFO);
$stream->setFormatter($formatter);

	$log = new Logger('Request');
	$log->pushHandler($stream);
	$action = $req->getQueryParams()['action']; //checks _GET [IS PSR-7 compliant]

	foreach($req->getQueryParams() as $params)
	{
		$log->info($params);
	}

	switch($action)
	{
		case "ListEvents":
			$userid = $req->getQueryParams()['userid'];
			$details = array('key'=>'Test', 'value'=>'Success', 'userid'=>$userid);
			$res = $res->withJSON($details);
			$log->info($res);
			return $res;
			break;
	}
});

// Run app
$app->run();
?>

```

I am getting following result in log

> 17-02-14 16:13:08] INFO : ListEvents  
> [17-02-14 16:13:08] INFO : 90  
> [17-02-14 16:13:08] INFO : HTTP/1.1 200 OK Content-Type: application/json;charset=utf-8 {“key”:“Test”,“value”:“Success”,“userid”:“90”}

But I need request log as

Request: “action=ListEvents&userid=90”  
Response: {“action”:“ListEvents”, “key”:“Test”, “value”:“Success”, “userid”:“90”}

How to do that? Any ideas?

---

<div class="post-metadata">

**Author:** ![llvdl](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/llvdl/32/78_2.png) [@llvdl](https://discourse.slimframework.com/u/llvdl)\
**Post date:** [February 14, 2017, 9:08pm UTC](https://discourse.slimframework.com/t/logging-request-details/1149/2 "2017-02-14T21:08:57Z")

</div>

You can try:

```php
$log->info('Request: "' . http_build_query($req->getQueryParams()) . '"');
$log->info('Response: ' . json_encode(['action' => 'ListEvents', 'key' => 'Test', 'value' => 'Success', 'userid' => $userid]));

```

---

<div class="post-metadata">

**Author:** ![AndreiGOiN](https://avatars.discourse-cdn.com/v4/letter/a/c6cbf5/32.png) [@AndreiGOiN](https://discourse.slimframework.com/u/AndreiGOiN)\
**Post date:** [May 24, 2017, 10:12am UTC](https://discourse.slimframework.com/t/logging-request-details/1149/3 "2017-05-24T10:12:23Z")

</div>

Hi!

Very useful information here. I would like to log RESPONSES from different types of request without including detailed information about parameters. Will be great to get the full response values.

# Now I use a middleware which log the request information:
\<?php namespace App\Middleware; class MonologMiddleware extends Middleware { public function \_\_invoke ($request, $response, $next) { $this-\>container-\>logger-\>debug("Logger, debug mode: ..."); $response = $next($request, $response); return $response; } } == Is it possible? Thank you.

---

<div class="post-metadata">

**Author:** ![llvdl](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/llvdl/32/78_2.png) [@llvdl](https://discourse.slimframework.com/u/llvdl)\
**Post date:** [June 4, 2017, 9:38pm UTC](https://discourse.slimframework.com/t/logging-request-details/1149/4 "2017-06-04T21:38:06Z")

</div>

I haven’t tried, but it looks possible. To get the response, add the logging after the call to `$next`, e.g.:

```php
class MonologMiddleware extends Middleware
{
    public function __invoke ($request, $response, $next)
    {
        $response = $next($request, $response);

        // add logging of response here, after call to $next
        $this->container->logger->debug('Response status: ' . $response->getStatusCode());

        return $response;
    }
}

```

---

<div class="post-metadata">

**Author:** ![AndreiGOiN](https://avatars.discourse-cdn.com/v4/letter/a/c6cbf5/32.png) [@AndreiGOiN](https://discourse.slimframework.com/u/AndreiGOiN)\
**Post date:** [June 9, 2017, 1:38pm UTC](https://discourse.slimframework.com/t/logging-request-details/1149/5 "2017-06-09T13:38:49Z")

</div>

Thank you, llvdl!  
It’s works super fine.

Do you know how to get also the \_POST parameters for logging?  
Big thanks in advance.

---

<div class="post-metadata">

**Author:** ![llvdl](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/llvdl/32/78_2.png) [@llvdl](https://discourse.slimframework.com/u/llvdl)\
**Post date:** [June 12, 2017, 7:48pm UTC](https://discourse.slimframework.com/t/logging-request-details/1149/6 "2017-06-12T19:48:28Z")

</div>

Hello AndreiGOiN,

I think `$request->getParsedBody()` should work to get the post parameters. See [https://www.slimframework.com/docs/objects/request.html#the-request-body](https://www.slimframework.com/docs/objects/request.html#the-request-body)
