LogViewerController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2018/11/26
  6. * Time: 11:05 PM
  7. */
  8. namespace app\backend\modules\developer\controllers;
  9. use app\common\components\BaseController;
  10. use app\common\helpers\Url;
  11. use Rap2hpoutre\LaravelLogViewer\LaravelLogViewer;
  12. class LogViewerController extends BaseController
  13. {
  14. /**
  15. * @var
  16. */
  17. protected $request;
  18. /**
  19. * @var LaravelLogViewer
  20. */
  21. private $log_viewer;
  22. public function preAction()
  23. {
  24. parent::preAction();
  25. $this->log_viewer = new LaravelLogViewer();
  26. $this->request = app('request');
  27. }
  28. /**
  29. * @return array|mixed
  30. * @throws \Exception
  31. */
  32. public function index()
  33. {
  34. $folderFiles = [];
  35. if ($this->request->input('f')) {
  36. $this->log_viewer->setFolder($this->request->input('f'));
  37. $folderFiles = $this->log_viewer->getFolderFiles(true);
  38. }
  39. if ($this->request->input('l')) {
  40. $this->log_viewer->setFile($this->request->input('l'));
  41. }
  42. if ($early_return = $this->earlyReturn()) {
  43. return $early_return;
  44. }
  45. $data = [
  46. 'logs' => $this->log_viewer->all(),
  47. 'folders' => $this->log_viewer->getFolders(),
  48. 'current_folder' => $this->log_viewer->getFolderName(),
  49. 'folder_files' => $folderFiles,
  50. 'files' => $this->log_viewer->getFiles(true),
  51. 'current_file' => $this->log_viewer->getFileName(),
  52. 'standardFormat' => true,
  53. ];
  54. if ($this->request->wantsJson()) {
  55. return $data;
  56. }
  57. if (is_array($data['logs'])) {
  58. $firstLog = reset($data['logs']);
  59. if (!$firstLog['context'] && !$firstLog['level']) {
  60. $data['standardFormat'] = false;
  61. }
  62. }
  63. return view('developer.log', $data)->render();
  64. }
  65. /**
  66. * @return bool|mixed
  67. * @throws \Exception
  68. */
  69. private function earlyReturn()
  70. {
  71. if ($this->request->input('f')) {
  72. $this->log_viewer->setFolder($this->request->input('f'));
  73. }
  74. if ($this->request->input('dl')) {
  75. return $this->download($this->pathFromInput('dl'));
  76. } elseif ($this->request->has('clean')) {
  77. app('files')->put($this->pathFromInput('clean'), '');
  78. return $this->redirect(Url::absoluteWeb('developer.log-viewer'));
  79. } elseif ($this->request->has('del')) {
  80. app('files')->delete($this->pathFromInput('del'));
  81. return $this->redirect(Url::absoluteWeb('developer.log-viewer'));
  82. } elseif ($this->request->has('delall')) {
  83. $files = ($this->log_viewer->getFolderName())
  84. ? $this->log_viewer->getFolderFiles(true)
  85. : $this->log_viewer->getFiles(true);
  86. foreach ($files as $file) {
  87. app('files')->delete($this->log_viewer->pathToLogFile($file));
  88. }
  89. return $this->redirect(Url::absoluteWeb('developer.log-viewer'));
  90. }
  91. return false;
  92. }
  93. /**
  94. * @param string $input_string
  95. * @return string
  96. * @throws \Exception
  97. */
  98. private function pathFromInput($input_string)
  99. {
  100. return $this->log_viewer->pathToLogFile($this->request->input($input_string));
  101. }
  102. /**
  103. * @param $to
  104. * @return mixed
  105. */
  106. private function redirect($to)
  107. {
  108. if (function_exists('redirect')) {
  109. return redirect($to);
  110. }
  111. return app('redirect')->to($to);
  112. }
  113. /**
  114. * @param string $data
  115. * @return mixed
  116. */
  117. private function download($data)
  118. {
  119. if (function_exists('response')) {
  120. return response()->download($data);
  121. }
  122. // For laravel 4.2
  123. return app('\Illuminate\Support\Facades\Response')->download($data);
  124. }
  125. }