ExtendedMonologTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace Nekonomokochan\Tests;
  3. use Monolog\Handler\RotatingFileHandler;
  4. use Monolog\Logger;
  5. use Monolog\Processor\IntrospectionProcessor;
  6. use Nekonomokochan\PhpJsonLogger\ErrorsContextFormatter;
  7. use Nekonomokochan\PhpJsonLogger\JsonFormatter;
  8. use PHPUnit\Framework\TestCase;
  9. /**
  10. * Class ExtendedMonologTest
  11. *
  12. * @package Nekonomokochan\Tests
  13. */
  14. class ExtendedMonologTest extends TestCase
  15. {
  16. use ErrorsContextFormatter;
  17. /**
  18. * @var string
  19. */
  20. private $logFileName = '/tmp/extended-monolog-test.log';
  21. /**
  22. * @var Logger
  23. */
  24. private $extendedMonolog;
  25. /**
  26. * create extendedMonolog Instance
  27. *
  28. * @throws \Exception
  29. */
  30. public function setUp()
  31. {
  32. parent::setUp();
  33. // Delete the log file to assert the log file
  34. $defaultFile = '/tmp/extended-monolog-test-' . date('Y-m-d') . '.log';
  35. if (file_exists($defaultFile)) {
  36. unlink($defaultFile);
  37. }
  38. // create extendedMonolog Instance
  39. $formatter = new JsonFormatter();
  40. $rotating = new RotatingFileHandler(
  41. $this->logFileName,
  42. 7,
  43. Logger::INFO
  44. );
  45. $rotating->setFormatter($formatter);
  46. $introspection = new IntrospectionProcessor(
  47. Logger::INFO,
  48. ['Nekonomokochan\\PhpJsonLogger\\'],
  49. 0
  50. );
  51. $extraRecords = function ($record) {
  52. $record['extra']['trace_id'] = 'ExtendedMonologTestTraceId';
  53. $record['extra']['created_time'] = microtime(true);
  54. return $record;
  55. };
  56. $this->extendedMonolog = new Logger(
  57. 'ExtendedMonolog',
  58. [$rotating],
  59. [$introspection, $extraRecords]
  60. );
  61. }
  62. /**
  63. * @test
  64. */
  65. public function outputInfoLog()
  66. {
  67. $context = [
  68. 'cat' => '🐱',
  69. 'dog' => '🐶',
  70. 'rabbit' => '🐰',
  71. ];
  72. $this->extendedMonolog->info('outputInfoLogTest', $context);
  73. $resultJson = file_get_contents('/tmp/extended-monolog-test-' . date('Y-m-d') . '.log');
  74. $resultArray = json_decode($resultJson, true);
  75. echo "\n ---- Output Log Begin ---- \n";
  76. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  77. echo "\n ---- Output Log End ---- \n";
  78. $expectedLog = [
  79. 'log_level' => 'INFO',
  80. 'message' => 'outputInfoLogTest',
  81. 'channel' => 'ExtendedMonolog',
  82. 'trace_id' => 'ExtendedMonologTestTraceId',
  83. 'file' => __FILE__,
  84. 'line' => 85,
  85. 'context' => $context,
  86. 'remote_ip_address' => '127.0.0.1',
  87. 'server_ip_address' => '127.0.0.1',
  88. 'user_agent' => 'unknown',
  89. 'datetime' => $resultArray['datetime'],
  90. 'timezone' => date_default_timezone_get(),
  91. 'process_time' => $resultArray['process_time'],
  92. ];
  93. $this->assertSame('ExtendedMonolog', $this->extendedMonolog->getName());
  94. $this->assertSame($expectedLog, $resultArray);
  95. }
  96. /**
  97. * @test
  98. */
  99. public function outputErrorLog()
  100. {
  101. $exception = new \Exception('ExtendedMonologTest.outputErrorLog', 500);
  102. $context = [
  103. 'cat' => '🐱(=^・^=)🐱',
  104. 'dog' => '🐶Uo・ェ・oU🐶',
  105. 'rabbit' => '🐰🐰🐰',
  106. ];
  107. $this->extendedMonolog->error(
  108. get_class($exception),
  109. $this->formatPhpJsonLoggerErrorsContext($exception, $context)
  110. );
  111. $resultJson = file_get_contents('/tmp/extended-monolog-test-' . date('Y-m-d') . '.log');
  112. $resultArray = json_decode($resultJson, true);
  113. echo "\n ---- Output Log Begin ---- \n";
  114. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  115. echo "\n ---- Output Log End ---- \n";
  116. $expectedLog = [
  117. 'log_level' => 'ERROR',
  118. 'message' => get_class($exception),
  119. 'channel' => 'ExtendedMonolog',
  120. 'trace_id' => 'ExtendedMonologTestTraceId',
  121. 'file' => __FILE__,
  122. 'line' => 128,
  123. 'context' => $context,
  124. 'remote_ip_address' => '127.0.0.1',
  125. 'server_ip_address' => '127.0.0.1',
  126. 'user_agent' => 'unknown',
  127. 'datetime' => $resultArray['datetime'],
  128. 'timezone' => date_default_timezone_get(),
  129. 'process_time' => $resultArray['process_time'],
  130. 'errors' => [
  131. 'message' => $exception->getMessage(),
  132. 'code' => $exception->getCode(),
  133. 'file' => $exception->getFile(),
  134. 'line' => $exception->getLine(),
  135. 'trace' => $resultArray['errors']['trace'],
  136. ],
  137. ];
  138. $this->assertSame('ExtendedMonolog', $this->extendedMonolog->getName());
  139. $this->assertSame($expectedLog, $resultArray);
  140. }
  141. }