Skip to content

Commit ceaea1e

Browse files
committed
Merge branch 'json-pretty-print-email'
* json-pretty-print-email: actual output = expected added Formatter\Json spec use json with pretty print format for mail log
2 parents 39b7aa2 + 4e347de commit ceaea1e

File tree

4 files changed

+95
-6
lines changed

4 files changed

+95
-6
lines changed

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
"zendframework/zend-console": "^2.5",
1919
"zendframework/zend-db": "^2.5",
2020
"zendframework/zend-hydrator": "^1.0|^2.0",
21-
"zendframework/zend-json": "^2.5|^3.0",
2221
"zendframework/zend-log": "^2.5",
2322
"zendframework/zend-mail": "^2.5",
2423
"zendframework/zend-servicemanager": "^2.5|^3.0",
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace ErrorHeroModule\Spec\Handler\Formatter;
4+
5+
use DateTime;
6+
use ErrorHeroModule\Handler\Formatter\Json;
7+
use Kahlan\Plugin\Double;
8+
9+
describe('Json', function () {
10+
11+
describe('->format()', function () {
12+
13+
it('format json', function () {
14+
15+
$event = [
16+
'timestamp' => DateTime::__set_state([
17+
'date' => '2016-12-30 00:42:49.558706',
18+
'timezone_type' => 3,
19+
'timezone' => 'Asia/Jakarta',
20+
]),
21+
'priority' => 3,
22+
'priorityName' => 'ERR',
23+
'message' => '1: a sample error preview',
24+
'extra' => [
25+
'url' => 'http://localhost/error-preview?foo=bar&page=1',
26+
'file' => '/path/to/app/vendor/samsonasik/error-hero-module/src/Controller/ErrorPreviewController.php',
27+
'line' => 11,
28+
'error_type' => 'Exception',
29+
'trace' => '#0 /path/to/app/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(78): ErrorHeroModule\\Controller\\ErrorPreviewController->exceptionAction()
30+
#1 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\\Mvc\\Controller\\AbstractActionController->onDispatch(Object(Zend\\Mvc\\MvcEvent))
31+
#2 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\\EventManager\\EventManager->triggerListeners(Object(Zend\\Mvc\\MvcEvent), Object(Closure))
32+
#3 /path/to/app/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(105): Zend\\EventManager\\EventManager->triggerEventUntil(Object(Closure), Object(Zend\\Mvc\\MvcEvent))
33+
#4 /path/to/app/vendor/zendframework/zend-mvc/src/DispatchListener.php(119): Zend\\Mvc\\Controller\\AbstractController->dispatch(Object(Zend\\Http\\PhpEnvironment\\Request), Object(Zend\\Http\\PhpEnvironment\\Response))
34+
#5 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\\Mvc\\DispatchListener->onDispatch(Object(Zend\\Mvc\\MvcEvent))
35+
#6 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\\EventManager\\EventManager->triggerListeners(Object(Zend\\Mvc\\MvcEvent), Object(Closure))
36+
#7 /path/to/app/vendor/zendframework/zend-mvc/src/Application.php(332): Zend\\EventManager\\EventManager->triggerEventUntil(Object(Closure), Object(Zend\\Mvc\\MvcEvent))
37+
#8 /path/to/app/public/index.php(40): Zend\\Mvc\\Application->run()
38+
#9 {main}',
39+
'request_data' => [
40+
'query' => [
41+
'foo' => 'bar',
42+
'page' => '1',
43+
],
44+
'request_method' => 'GET',
45+
'body_data' => [],
46+
'raw_data' => '',
47+
'files_data' => [],
48+
],
49+
],
50+
];
51+
52+
expect('json_encode')->toBeCalled();
53+
54+
$formatter = new Json();
55+
$actual = $formatter->format($event);
56+
57+
expect($actual)->toBe("{\n \"timestamp\": \"2016-12-30T00:42:49+07:00\",\n \"priority\": 3,\n \"priorityName\": \"ERR\",\n \"message\": \"1: a sample error preview\",\n \"extra\": {\n \"url\": \"http://localhost/error-preview?foo=bar&page=1\",\n \"file\": \"/path/to/app/vendor/samsonasik/error-hero-module/src/Controller/ErrorPreviewController.php\",\n \"line\": 11,\n \"error_type\": \"Exception\",\n \"trace\": \"#0 /path/to/app/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(78): ErrorHeroModule\\\\Controller\\\\ErrorPreviewController->exceptionAction()\n #1 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\\\\Mvc\\\\Controller\\\\AbstractActionController->onDispatch(Object(Zend\\\\Mvc\\\\MvcEvent))\n #2 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\\\\EventManager\\\\EventManager->triggerListeners(Object(Zend\\\\Mvc\\\\MvcEvent), Object(Closure))\n #3 /path/to/app/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(105): Zend\\\\EventManager\\\\EventManager->triggerEventUntil(Object(Closure), Object(Zend\\\\Mvc\\\\MvcEvent))\n #4 /path/to/app/vendor/zendframework/zend-mvc/src/DispatchListener.php(119): Zend\\\\Mvc\\\\Controller\\\\AbstractController->dispatch(Object(Zend\\\\Http\\\\PhpEnvironment\\\\Request), Object(Zend\\\\Http\\\\PhpEnvironment\\\\Response))\n #5 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\\\\Mvc\\\\DispatchListener->onDispatch(Object(Zend\\\\Mvc\\\\MvcEvent))\n #6 /path/to/app/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\\\\EventManager\\\\EventManager->triggerListeners(Object(Zend\\\\Mvc\\\\MvcEvent), Object(Closure))\n #7 /path/to/app/vendor/zendframework/zend-mvc/src/Application.php(332): Zend\\\\EventManager\\\\EventManager->triggerEventUntil(Object(Closure), Object(Zend\\\\Mvc\\\\MvcEvent))\n #8 /path/to/app/public/index.php(40): Zend\\\\Mvc\\\\Application->run()\n #9 {main}\",\n \"request_data\": {\n \"query\": {\n \"foo\": \"bar\",\n \"page\": \"1\"\n },\n \"request_method\": \"GET\",\n \"body_data\": [],\n \"raw_data\": \"\",\n \"files_data\": []\n }\n }\n}");
58+
59+
});
60+
61+
});
62+
63+
});

src/Handler/Formatter/Json.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace ErrorHeroModule\Handler\Formatter;
4+
5+
use DateTime;
6+
use Zend\Log\Formatter\Base;
7+
use Zend\Log\Formatter\FormatterInterface;
8+
9+
class Json extends Base implements FormatterInterface
10+
{
11+
/**
12+
* @param array $event event data
13+
* @return string formatted line to write to the log
14+
*/
15+
public function format($event)
16+
{
17+
if (isset($event['timestamp']) && $event['timestamp'] instanceof DateTime) {
18+
$event['timestamp'] = $event['timestamp']->format($this->getDateTimeFormat());
19+
}
20+
21+
$formatted = json_encode($event, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
22+
$newLine = <<<newLine
23+
24+
25+
newLine;
26+
27+
return str_replace('\n', $newLine, $formatted);
28+
}
29+
}

src/Handler/Logging.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
use Error;
66
use ErrorException;
77
use Zend\Http\PhpEnvironment\Request;
8-
use Zend\Json\Json;
9-
use Zend\Log\Formatter\Xml;
108
use Zend\Log\Logger;
119
use Zend\Log\Writer\Db;
1210
use Zend\Log\Writer\Mail;
@@ -144,7 +142,7 @@ private function getRequestData()
144142
];
145143
}
146144

147-
return Json::prettyPrint(Json::encode($request_data));
145+
return $request_data;
148146
}
149147

150148
/**
@@ -166,7 +164,7 @@ private function sendMail($priority, $errorMessage, $extra, $subject)
166164
$this->mailMessageService,
167165
$this->mailMessageTransport
168166
);
169-
$formatter = new Xml();
167+
$formatter = new Formatter\Json();
170168
$writer->setFormatter($formatter);
171169

172170
// use setWriters() to clean up existing writers
@@ -193,8 +191,8 @@ public function handleException($e)
193191

194192
$errorFile = $e->getFile();
195193
$errorLine = $e->getLine();
194+
$trace = $e->getTraceAsString();
196195

197-
$trace = $e->getTraceAsString();
198196
$i = 1;
199197
do {
200198
$messages[] = $i++.': '.$e->getMessage();

0 commit comments

Comments
 (0)