123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- <!DOCTYPE html>
- <html lang="{{app()->getLocale()}}">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
- <meta name="robots" content="noindex, nofollow">
- <title>系统运行日志</title>
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
- <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">
- <style type="text/css">
- body {
- padding: 25px;
- }
- h1 {
- font-size: 1.5em;
- margin-top: 0;
- }
- #table-log {
- font-size: 0.85rem;
- }
- .sidebar {
- font-size: 0.85rem;
- line-height: 1;
- }
- .btn {
- font-size: 0.7rem;
- }
- .stack {
- font-size: 0.85em;
- }
- .date {
- min-width: 75px;
- }
- .text {
- word-break: break-all;
- }
- a.llv-active {
- z-index: 2;
- background-color: #f5f5f5;
- border-color: #777;
- }
- .list-group-item {
- word-wrap: break-word;
- }
- .folder {
- padding-top: 15px;
- }
- .div-scroll {
- height: 80vh;
- overflow: hidden auto;
- }
- .nowrap {
- white-space: nowrap;
- }
- </style>
- </head>
- <body>
- <div class="container-fluid">
- <div class="row">
- <div class="col sidebar mb-3">
- <h1><i class="fa fa-calendar" aria-hidden="true"></i> 系统运行日志 </h1>
- <div class="list-group div-scroll">
- @foreach($folders as $folder)
- <div class="list-group-item">
- <a href="?f={{ \Illuminate\Support\Facades\Crypt::encrypt($folder) }}">
- <span class="fa fa-folder"></span> {{$folder}}
- </a>
- @if ($current_folder == $folder)
- <div class="list-group folder">
- @foreach($folder_files as $file)
- <a href="?l={{ \Illuminate\Support\Facades\Crypt::encrypt($file) }}&f={{ \Illuminate\Support\Facades\Crypt::encrypt($folder) }}"
- class="list-group-item @if ($current_file == $file) llv-active @endif">
- {{$file}}
- </a>
- @endforeach
- </div>
- @endif
- </div>
- @endforeach
- @foreach($files as $file)
- <a href="?l={{ \Illuminate\Support\Facades\Crypt::encrypt($file) }}"
- class="list-group-item @if ($current_file == $file) llv-active @endif">
- {{$file}}
- </a>
- @endforeach
- </div>
- </div>
- <div class="col-10 table-container">
- @if ($logs === NULL)
- <div>
- Log file >50M, please download it.
- </div>
- @else
- <table id="table-log" class="table table-striped" data-ordering-index="{{ $standardFormat ? 2 : 0 }}">
- <thead>
- <tr>
- @if ($standardFormat)
- <th>Level</th>
- <th>Context</th>
- <th>Date</th>
- @else
- <th>Line number</th>
- @endif
- <th>Content</th>
- </tr>
- </thead>
- <tbody>
- @foreach($logs as $key => $log)
- <tr data-display="stack{{{$key}}}">
- @if ($standardFormat)
- <td class="nowrap text-{{{$log['level_class']}}}">
- <span class="fa fa-{{{$log['level_img']}}}"
- aria-hidden="true"></span> {{$log['level']}}
- </td>
- <td class="text">{{$log['context']}}</td>
- @endif
- <td class="date">{{{$log['date']}}}</td>
- <td class="text">
- @if ($log['stack'])
- <button type="button"
- class="float-right expand btn btn-outline-dark btn-sm mb-2 ml-2"
- data-display="stack{{{$key}}}">
- <span class="fa fa-search"></span>
- </button>
- @endif
- {{{$log['text']}}}
- @if (isset($log['in_file']))
- <br/>{{{$log['in_file']}}}
- @endif
- @if ($log['stack'])
- <div class="stack" id="stack{{{$key}}}"
- style="display: none; white-space: pre-wrap;">{{{ trim($log['stack']) }}}
- </div>
- @endif
- </td>
- </tr>
- @endforeach
- </tbody>
- </table>
- @endif
- <div class="p-3">
- @if($current_file)
- <a href="?dl={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
- <span class="fa fa-download"></span> 下 载
- </a>
- -
- <a id="clean-log"
- href="?clean={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
- <span class="fa fa-sync"></span> 清 空
- </a>
- -
- <a id="delete-log"
- href="?del={{ \Illuminate\Support\Facades\Crypt::encrypt($current_file) }}{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
- <span class="fa fa-trash"></span> 删 除
- </a>
- @if(count($files) > 1)
- -
- <a id="delete-all-log"
- href="?delall=true{{ ($current_folder) ? '&f=' . \Illuminate\Support\Facades\Crypt::encrypt($current_folder) : '' }}">
- <span class="fa fa-trash-alt"></span> 删除全部
- </a>
- @endif
- @endif
- </div>
- </div>
- </div>
- </div>
- <!-- jQuery for Bootstrap -->
- <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
- <!-- FontAwesome -->
- <script defer src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
- <!-- Datatables -->
- <script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
- <script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function () {
- $('.table-container tr').on('click', function () {
- $('#' + $(this).data('display')).toggle();
- });
- $('#table-log').DataTable({
- "order": [$('#table-log').data('orderingIndex'), 'desc'],
- "stateSave": true,
- "stateSaveCallback": function (settings, data) {
- window.localStorage.setItem("datatable", JSON.stringify(data));
- },
- "stateLoadCallback": function (settings) {
- var data = JSON.parse(window.localStorage.getItem("datatable"));
- if (data) data.start = 0;
- return data;
- },
- "language": {
- "lengthMenu": "每页 _MENU_ 条",
- "paginate": {
- "previous": "上一页",
- "next": "下一页"
- },
- "search": "搜索",
- "info": "第 _PAGE_ 页,共 _PAGES_ 页"
- }
- });
- $('#delete-log, #clean-log, #delete-all-log').click(function () {
- return confirm('确定继续吗?');
- });
- });
- </script>
- </body>
- </html>
|