LoggerTest.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. <?php
  2. namespace Nekonomokochan\Tests\Logger;
  3. use Nekonomokochan\PhpJsonLogger\LoggerBuilder;
  4. use PHPUnit\Framework\TestCase;
  5. /**
  6. * Class PhpJsonLoggerTest
  7. *
  8. * Add common test code to this class for all log methods
  9. *
  10. * @package Nekonomokochan\Tests
  11. */
  12. class LoggerTest extends TestCase
  13. {
  14. /**
  15. * @var string
  16. */
  17. private $defaultOutputFileBaseName;
  18. /**
  19. * @var string
  20. */
  21. private $defaultOutputFileName;
  22. /**
  23. * Delete the log file used last time to test the contents of the log file
  24. */
  25. public function setUp()
  26. {
  27. parent::setUp();
  28. $this->defaultOutputFileBaseName = '/tmp/php-json-logger.log';
  29. $this->defaultOutputFileName = '/tmp/php-json-logger-' . date('Y-m-d') . '.log';
  30. if (file_exists($this->defaultOutputFileName)) {
  31. unlink($this->defaultOutputFileName);
  32. }
  33. }
  34. /**
  35. * @test
  36. */
  37. public function outputUserAgent()
  38. {
  39. $userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36';
  40. $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36';
  41. $context = [
  42. 'name' => 'keitakn',
  43. ];
  44. $loggerBuilder = new LoggerBuilder();
  45. $logger = $loggerBuilder->build();
  46. $logger->info('testOutputUserAgent', $context);
  47. unset($_SERVER['HTTP_USER_AGENT']);
  48. $resultJson = file_get_contents($this->defaultOutputFileName);
  49. $resultArray = json_decode($resultJson, true);
  50. echo "\n ---- Output Log Begin ---- \n";
  51. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  52. echo "\n ---- Output Log End ---- \n";
  53. $expectedLog = [
  54. 'log_level' => 'INFO',
  55. 'message' => 'testOutputUserAgent',
  56. 'channel' => 'PhpJsonLogger',
  57. 'trace_id' => $logger->getTraceId(),
  58. 'file' => __FILE__,
  59. 'line' => 54,
  60. 'context' => $context,
  61. 'remote_ip_address' => '127.0.0.1',
  62. 'server_ip_address' => '127.0.0.1',
  63. 'user_agent' => $userAgent,
  64. 'datetime' => $resultArray['datetime'],
  65. 'timezone' => date_default_timezone_get(),
  66. 'process_time' => $resultArray['process_time'],
  67. ];
  68. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  69. $this->assertSame($expectedLog, $resultArray);
  70. }
  71. /**
  72. * @test
  73. */
  74. public function outputRemoteIpAddress()
  75. {
  76. $remoteIpAddress = '192.168.10.20';
  77. $_SERVER['REMOTE_ADDR'] = $remoteIpAddress;
  78. $context = [
  79. 'name' => 'keitakn',
  80. ];
  81. $loggerBuilder = new LoggerBuilder();
  82. $logger = $loggerBuilder->build();
  83. $logger->info('testOutputRemoteIpAddress', $context);
  84. unset($_SERVER['REMOTE_ADDR']);
  85. $resultJson = file_get_contents($this->defaultOutputFileName);
  86. $resultArray = json_decode($resultJson, true);
  87. echo "\n ---- Output Log Begin ---- \n";
  88. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  89. echo "\n ---- Output Log End ---- \n";
  90. $expectedLog = [
  91. 'log_level' => 'INFO',
  92. 'message' => 'testOutputRemoteIpAddress',
  93. 'channel' => 'PhpJsonLogger',
  94. 'trace_id' => $logger->getTraceId(),
  95. 'file' => __FILE__,
  96. 'line' => 99,
  97. 'context' => $context,
  98. 'remote_ip_address' => $remoteIpAddress,
  99. 'server_ip_address' => '127.0.0.1',
  100. 'user_agent' => 'unknown',
  101. 'datetime' => $resultArray['datetime'],
  102. 'timezone' => date_default_timezone_get(),
  103. 'process_time' => $resultArray['process_time'],
  104. ];
  105. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  106. $this->assertSame($expectedLog, $resultArray);
  107. }
  108. /**
  109. * @test
  110. */
  111. public function setTraceIdIsOutput()
  112. {
  113. $context = [
  114. 'name' => 'keitakn',
  115. ];
  116. $loggerBuilder = new LoggerBuilder();
  117. $loggerBuilder->setTraceId('MyTraceID');
  118. $logger = $loggerBuilder->build();
  119. $logger->info('testSetTraceIdIsOutput', $context);
  120. $resultJson = file_get_contents($this->defaultOutputFileName);
  121. $resultArray = json_decode($resultJson, true);
  122. echo "\n ---- Output Log Begin ---- \n";
  123. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  124. echo "\n ---- Output Log End ---- \n";
  125. $expectedLog = [
  126. 'log_level' => 'INFO',
  127. 'message' => 'testSetTraceIdIsOutput',
  128. 'channel' => 'PhpJsonLogger',
  129. 'trace_id' => 'MyTraceID',
  130. 'file' => __FILE__,
  131. 'line' => 142,
  132. 'context' => $context,
  133. 'remote_ip_address' => '127.0.0.1',
  134. 'server_ip_address' => '127.0.0.1',
  135. 'user_agent' => 'unknown',
  136. 'datetime' => $resultArray['datetime'],
  137. 'timezone' => date_default_timezone_get(),
  138. 'process_time' => $resultArray['process_time'],
  139. ];
  140. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  141. $this->assertSame('MyTraceID', $logger->getTraceId());
  142. $this->assertSame($expectedLog, $resultArray);
  143. }
  144. /**
  145. * @test
  146. */
  147. public function setLogFileName()
  148. {
  149. $outputFileBaseName = '/tmp/test-php-json-logger.log';
  150. $outputFileName = '/tmp/test-php-json-logger-' . date('Y-m-d') . '.log';
  151. if (file_exists($outputFileName)) {
  152. unlink($outputFileName);
  153. }
  154. $context = [
  155. 'cat' => '🐱',
  156. 'dog' => '🐶',
  157. 'rabbit' => '🐰',
  158. ];
  159. $loggerBuilder = new LoggerBuilder();
  160. $loggerBuilder->setFileName($outputFileBaseName);
  161. $logger = $loggerBuilder->build();
  162. $logger->info('testSetLogFileName', $context);
  163. $resultJson = file_get_contents($outputFileName);
  164. $resultArray = json_decode($resultJson, true);
  165. echo "\n ---- Output Log Begin ---- \n";
  166. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  167. echo "\n ---- Output Log End ---- \n";
  168. $expectedLog = [
  169. 'log_level' => 'INFO',
  170. 'message' => 'testSetLogFileName',
  171. 'channel' => 'PhpJsonLogger',
  172. 'trace_id' => $logger->getTraceId(),
  173. 'file' => __FILE__,
  174. 'line' => 192,
  175. 'context' => $context,
  176. 'remote_ip_address' => '127.0.0.1',
  177. 'server_ip_address' => '127.0.0.1',
  178. 'user_agent' => 'unknown',
  179. 'datetime' => $resultArray['datetime'],
  180. 'timezone' => date_default_timezone_get(),
  181. 'process_time' => $resultArray['process_time'],
  182. ];
  183. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  184. $this->assertSame(
  185. $outputFileBaseName,
  186. $logger->getLogFileName()
  187. );
  188. $this->assertSame($expectedLog, $resultArray);
  189. }
  190. /**
  191. * @test
  192. */
  193. public function setLogLevel()
  194. {
  195. $context = [
  196. 'cat' => '🐱',
  197. 'dog' => '🐶',
  198. 'rabbit' => '🐰',
  199. ];
  200. $loggerBuilder = new LoggerBuilder();
  201. $loggerBuilder->setLogLevel(LoggerBuilder::CRITICAL);
  202. $logger = $loggerBuilder->build();
  203. $logger->info('testSetLogLevel', $context);
  204. $this->assertFalse(
  205. file_exists($this->defaultOutputFileName)
  206. );
  207. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  208. $this->assertSame(500, $logger->getLogLevel());
  209. }
  210. /**
  211. * @test
  212. */
  213. public function outputHttpXForwardedFor()
  214. {
  215. $_SERVER['HTTP_X_FORWARDED_FOR'] = '10.0.0.0,10.1.1.1';
  216. $_SERVER['REMOTE_ADDR'] = '192.168.10.20';
  217. $expectedRemoteIpAddress = '10.0.0.0';
  218. $context = [
  219. 'name' => 'keitakn',
  220. ];
  221. $loggerBuilder = new LoggerBuilder();
  222. $logger = $loggerBuilder->build();
  223. $logger->info('testOutputHttpXForwardedFor', $context);
  224. unset($_SERVER['REMOTE_ADDR']);
  225. unset($_SERVER['HTTP_X_FORWARDED_FOR']);
  226. $resultJson = file_get_contents($this->defaultOutputFileName);
  227. $resultArray = json_decode($resultJson, true);
  228. echo "\n ---- Output Log Begin ---- \n";
  229. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  230. echo "\n ---- Output Log End ---- \n";
  231. $expectedLog = [
  232. 'log_level' => 'INFO',
  233. 'message' => 'testOutputHttpXForwardedFor',
  234. 'channel' => 'PhpJsonLogger',
  235. 'trace_id' => $logger->getTraceId(),
  236. 'file' => __FILE__,
  237. 'line' => 265,
  238. 'context' => $context,
  239. 'remote_ip_address' => $expectedRemoteIpAddress,
  240. 'server_ip_address' => '127.0.0.1',
  241. 'user_agent' => 'unknown',
  242. 'datetime' => $resultArray['datetime'],
  243. 'timezone' => date_default_timezone_get(),
  244. 'process_time' => $resultArray['process_time'],
  245. ];
  246. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  247. $this->assertSame($expectedLog, $resultArray);
  248. }
  249. /**
  250. * @test
  251. */
  252. public function canSetMaxFiles()
  253. {
  254. $context = [
  255. 'name' => 'keitakn',
  256. ];
  257. $loggerBuilder = new LoggerBuilder();
  258. $loggerBuilder->setMaxFiles(2);
  259. $logger = $loggerBuilder->build();
  260. $logger->info('testCanSetMaxFiles', $context);
  261. $resultJson = file_get_contents($this->defaultOutputFileName);
  262. $resultArray = json_decode($resultJson, true);
  263. echo "\n ---- Output Log Begin ---- \n";
  264. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  265. echo "\n ---- Output Log End ---- \n";
  266. $expectedLog = [
  267. 'log_level' => 'INFO',
  268. 'message' => 'testCanSetMaxFiles',
  269. 'channel' => 'PhpJsonLogger',
  270. 'trace_id' => $logger->getTraceId(),
  271. 'file' => __FILE__,
  272. 'line' => 309,
  273. 'context' => $context,
  274. 'remote_ip_address' => '127.0.0.1',
  275. 'server_ip_address' => '127.0.0.1',
  276. 'user_agent' => 'unknown',
  277. 'datetime' => $resultArray['datetime'],
  278. 'timezone' => date_default_timezone_get(),
  279. 'process_time' => $resultArray['process_time'],
  280. ];
  281. $this->assertSame('PhpJsonLogger', $logger->getChannel());
  282. $this->assertSame(2, $logger->getMaxFiles());
  283. $this->assertSame($expectedLog, $resultArray);
  284. }
  285. /**
  286. * @test
  287. */
  288. public function canSetChannel()
  289. {
  290. $context = [
  291. 'animals' => '🐱🐶🐰🐱🐹',
  292. ];
  293. $expectedChannel = 'My Favorite Animals';
  294. $loggerBuilder = new LoggerBuilder();
  295. $loggerBuilder->setChannel($expectedChannel);
  296. $logger = $loggerBuilder->build();
  297. $logger->info('testCanSetChannel', $context);
  298. $resultJson = file_get_contents($this->defaultOutputFileName);
  299. $resultArray = json_decode($resultJson, true);
  300. echo "\n ---- Output Log Begin ---- \n";
  301. echo json_encode($resultArray, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  302. echo "\n ---- Output Log End ---- \n";
  303. $expectedLog = [
  304. 'log_level' => 'INFO',
  305. 'message' => 'testCanSetChannel',
  306. 'channel' => $expectedChannel,
  307. 'trace_id' => $logger->getTraceId(),
  308. 'file' => __FILE__,
  309. 'line' => 353,
  310. 'context' => $context,
  311. 'remote_ip_address' => '127.0.0.1',
  312. 'server_ip_address' => '127.0.0.1',
  313. 'user_agent' => 'unknown',
  314. 'datetime' => $resultArray['datetime'],
  315. 'timezone' => date_default_timezone_get(),
  316. 'process_time' => $resultArray['process_time'],
  317. ];
  318. $this->assertSame($expectedChannel, $logger->getChannel());
  319. $this->assertSame($expectedLog, $resultArray);
  320. }
  321. }